• Vaibhav Jain's avatar
    powerpc/papr_scm: Fix leaking nvdimm_events_map elements · 0e0946e2
    Vaibhav Jain authored
    Right now 'char *' elements allocated for individual 'stat_id' in
    'papr_scm_priv.nvdimm_events_map[]' during papr_scm_pmu_check_events(), get
    leaked in papr_scm_remove() and papr_scm_pmu_register(),
    papr_scm_pmu_check_events() error paths.
    
    Also individual 'stat_id' arent NULL terminated 'char *' instead they are fixed
    8-byte sized identifiers. However papr_scm_pmu_register() assumes it to be a
    NULL terminated 'char *' and at other places it assumes it to be a
    'papr_scm_perf_stat.stat_id' sized string which is 8-byes in size.
    
    Fix this by allocating the memory for papr_scm_priv.nvdimm_events_map to also
    include space for 'stat_id' entries. This is possible since number of available
    events/stat_ids are known upfront. This saves some memory and one extra level of
    indirection from 'nvdimm_events_map' to 'stat_id'. Also rest of the code
    can continue to call 'kfree(papr_scm_priv.nvdimm_events_map)' without needing to
    iterate over the array and free up individual elements.
    
    Fixes: 4c08d4bb ("powerpc/papr_scm: Add perf interface support")
    Signed-off-by: default avatarVaibhav Jain <vaibhav@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20220511082637.646714-1-vaibhav@linux.ibm.com
    0e0946e2
papr_scm.c 41.8 KB