[S390] drivers/s390/block/dasd_ioctl.c: add missing kfree
Data is only used to temporarily hold information to be copied to the user level, so it should be freed before leaving the function. A simplified version of the semantic match that finds this problem is as follows: (http://coccinelle.lip6.fr/) // <smpl> @exists@ local idexpression x; statement S,S1; expression E; identifier fl; expression *ptr != NULL; @@ x = \(kmalloc\|kzalloc\|kcalloc\)(...); ... if (x == NULL) S <... when != x when != if (...) { <+...kfree(x)...+> } when any when != true x == NULL x->fl ...> ( if (x == NULL) S1 | if (...) { ... when != x when forall ( return \(0\|<+...x...+>\|ptr\); | * return ...; ) } ) // </smpl> Signed-off-by: Julia Lawall <julia@diku.dk> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Родитель
27e7318c3e
Коммит
ba465d830e
|
@ -249,6 +249,7 @@ static int dasd_ioctl_reset_profile(struct dasd_block *block)
|
|||
static int dasd_ioctl_read_profile(struct dasd_block *block, void __user *argp)
|
||||
{
|
||||
struct dasd_profile_info_t *data;
|
||||
int rc = 0;
|
||||
|
||||
data = kmalloc(sizeof(*data), GFP_KERNEL);
|
||||
if (!data)
|
||||
|
@ -279,11 +280,14 @@ static int dasd_ioctl_read_profile(struct dasd_block *block, void __user *argp)
|
|||
spin_unlock_bh(&block->profile.lock);
|
||||
} else {
|
||||
spin_unlock_bh(&block->profile.lock);
|
||||
return -EIO;
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
if (copy_to_user(argp, data, sizeof(*data)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
rc = -EFAULT;
|
||||
out:
|
||||
kfree(data);
|
||||
return rc;
|
||||
}
|
||||
#else
|
||||
static int dasd_ioctl_reset_profile(struct dasd_block *block)
|
||||
|
|
Загрузка…
Ссылка в новой задаче