On Thu, 8 Sep 2011 10:04:05 +0400 Cyrill Gorcunov <gorcunov@xxxxxxxxx> wrote: > fs, proc: Introduce the /proc/<pid>/map_files/ directory v11 Ho hum, I've pretty much run out of excuses to avoid merging this. except... We don't really want to bloat fs/proc/base.o by 4k until all the other things which support c/r are mergeable and we know that the whole project is actually useful. When will we be at this stage? <looks at the warning> fs/proc/base.c: In function 'proc_map_files_instantiate': fs/proc/base.c:2348: warning: assignment from incompatible pointer type err, that code will crash at runtime and it isn't trivial to fix. How could this happen? > > ... > > + if (fa) > + flex_array_free(fa); > > ... > > + if (fa) > + flex_array_free(fa); I think I'll do this: From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Lots of callers are avoiding passing NULL into flex_array_free(). Move the check into flex_array_free() in the usual fashion. Cc: Stephen Smalley <sds@xxxxxxxxxxxxx> Cc: James Morris <jmorris@xxxxxxxxx> Cc: Cyrill Gorcunov <gorcunov@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/proc/base.c | 6 ++---- lib/flex_array.c | 2 ++ security/selinux/ss/policydb.c | 9 +++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff -puN lib/flex_array.c~lib-flex_arrayc-accept-null-arg-to-flex_array_free lib/flex_array.c --- a/lib/flex_array.c~lib-flex_arrayc-accept-null-arg-to-flex_array_free +++ a/lib/flex_array.c @@ -142,6 +142,8 @@ EXPORT_SYMBOL(flex_array_free_parts); void flex_array_free(struct flex_array *fa) { + if (!fa) + return; flex_array_free_parts(fa); kfree(fa); } diff -puN fs/proc/base.c~lib-flex_arrayc-accept-null-arg-to-flex_array_free fs/proc/base.c --- a/fs/proc/base.c~lib-flex_arrayc-accept-null-arg-to-flex_array_free +++ a/fs/proc/base.c @@ -2514,8 +2514,7 @@ static int proc_map_files_readdir(struct fa = flex_array_alloc(sizeof(info), nr_files, GFP_KERNEL); if (!fa || flex_array_prealloc(fa, 0, nr_files, GFP_KERNEL)) { ret = -ENOMEM; - if (fa) - flex_array_free(fa); + flex_array_free(fa); up_read(&mm->mmap_sem); mmput(mm); goto out; @@ -2556,8 +2555,7 @@ static int proc_map_files_readdir(struct p = flex_array_get(fa, i); fput(p->file); } - if (fa) - flex_array_free(fa); + flex_array_free(fa); mmput(mm); } } diff -puN security/selinux/ss/policydb.c~lib-flex_arrayc-accept-null-arg-to-flex_array_free security/selinux/ss/policydb.c --- a/security/selinux/ss/policydb.c~lib-flex_arrayc-accept-null-arg-to-flex_array_free +++ a/security/selinux/ss/policydb.c @@ -769,16 +769,13 @@ void policydb_destroy(struct policydb *p hashtab_destroy(p->symtab[i].table); } - for (i = 0; i < SYM_NUM; i++) { - if (p->sym_val_to_name[i]) - flex_array_free(p->sym_val_to_name[i]); - } + for (i = 0; i < SYM_NUM; i++) + flex_array_free(p->sym_val_to_name[i]); kfree(p->class_val_to_struct); kfree(p->role_val_to_struct); kfree(p->user_val_to_struct); - if (p->type_val_to_struct_array) - flex_array_free(p->type_val_to_struct_array); + flex_array_free(p->type_val_to_struct_array); avtab_destroy(&p->te_avtab); _ -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html