aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Weinberger <richard@nod.at>2016-01-02 17:09:47 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2016-01-09 02:55:18 -0500
commit0b2a6f231dcbc7bd543a5aaa23b0ea76ce16e585 (patch)
treef004ae94d6d88cdb16d6d04db66203530c873d7e
parentbdb97e91e0140230bda9a83f6dbaa29b0c2e0522 (diff)
fs: xattr: Use kvfree()
... instead of open coding it. Signed-off-by: Richard Weinberger <richard@nod.at> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--fs/xattr.c38
1 files changed, 14 insertions, 24 deletions
diff --git a/fs/xattr.c b/fs/xattr.c
index 9b932b95d74e..9e8a6529dfc5 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -324,7 +324,6 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
324{ 324{
325 int error; 325 int error;
326 void *kvalue = NULL; 326 void *kvalue = NULL;
327 void *vvalue = NULL; /* If non-NULL, we used vmalloc() */
328 char kname[XATTR_NAME_MAX + 1]; 327 char kname[XATTR_NAME_MAX + 1];
329 328
330 if (flags & ~(XATTR_CREATE|XATTR_REPLACE)) 329 if (flags & ~(XATTR_CREATE|XATTR_REPLACE))
@@ -341,10 +340,9 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
341 return -E2BIG; 340 return -E2BIG;
342 kvalue = kmalloc(size, GFP_KERNEL | __GFP_NOWARN); 341 kvalue = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
343 if (!kvalue) { 342 if (!kvalue) {
344 vvalue = vmalloc(size); 343 kvalue = vmalloc(size);
345 if (!vvalue) 344 if (!kvalue)
346 return -ENOMEM; 345 return -ENOMEM;
347 kvalue = vvalue;
348 } 346 }
349 if (copy_from_user(kvalue, value, size)) { 347 if (copy_from_user(kvalue, value, size)) {
350 error = -EFAULT; 348 error = -EFAULT;
@@ -357,10 +355,8 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
357 355
358 error = vfs_setxattr(d, kname, kvalue, size, flags); 356 error = vfs_setxattr(d, kname, kvalue, size, flags);
359out: 357out:
360 if (vvalue) 358 kvfree(kvalue);
361 vfree(vvalue); 359
362 else
363 kfree(kvalue);
364 return error; 360 return error;
365} 361}
366 362
@@ -428,7 +424,6 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
428{ 424{
429 ssize_t error; 425 ssize_t error;
430 void *kvalue = NULL; 426 void *kvalue = NULL;
431 void *vvalue = NULL;
432 char kname[XATTR_NAME_MAX + 1]; 427 char kname[XATTR_NAME_MAX + 1];
433 428
434 error = strncpy_from_user(kname, name, sizeof(kname)); 429 error = strncpy_from_user(kname, name, sizeof(kname));
@@ -442,10 +437,9 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
442 size = XATTR_SIZE_MAX; 437 size = XATTR_SIZE_MAX;
443 kvalue = kzalloc(size, GFP_KERNEL | __GFP_NOWARN); 438 kvalue = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
444 if (!kvalue) { 439 if (!kvalue) {
445 vvalue = vmalloc(size); 440 kvalue = vmalloc(size);
446 if (!vvalue) 441 if (!kvalue)
447 return -ENOMEM; 442 return -ENOMEM;
448 kvalue = vvalue;
449 } 443 }
450 } 444 }
451 445
@@ -461,10 +455,9 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
461 than XATTR_SIZE_MAX bytes. Not possible. */ 455 than XATTR_SIZE_MAX bytes. Not possible. */
462 error = -E2BIG; 456 error = -E2BIG;
463 } 457 }
464 if (vvalue) 458
465 vfree(vvalue); 459 kvfree(kvalue);
466 else 460
467 kfree(kvalue);
468 return error; 461 return error;
469} 462}
470 463
@@ -521,17 +514,15 @@ listxattr(struct dentry *d, char __user *list, size_t size)
521{ 514{
522 ssize_t error; 515 ssize_t error;
523 char *klist = NULL; 516 char *klist = NULL;
524 char *vlist = NULL; /* If non-NULL, we used vmalloc() */
525 517
526 if (size) { 518 if (size) {
527 if (size > XATTR_LIST_MAX) 519 if (size > XATTR_LIST_MAX)
528 size = XATTR_LIST_MAX; 520 size = XATTR_LIST_MAX;
529 klist = kmalloc(size, __GFP_NOWARN | GFP_KERNEL); 521 klist = kmalloc(size, __GFP_NOWARN | GFP_KERNEL);
530 if (!klist) { 522 if (!klist) {
531 vlist = vmalloc(size); 523 klist = vmalloc(size);
532 if (!vlist) 524 if (!klist)
533 return -ENOMEM; 525 return -ENOMEM;
534 klist = vlist;
535 } 526 }
536 } 527 }
537 528
@@ -544,10 +535,9 @@ listxattr(struct dentry *d, char __user *list, size_t size)
544 than XATTR_LIST_MAX bytes. Not possible. */ 535 than XATTR_LIST_MAX bytes. Not possible. */
545 error = -E2BIG; 536 error = -E2BIG;
546 } 537 }
547 if (vlist) 538
548 vfree(vlist); 539 kvfree(klist);
549 else 540
550 kfree(klist);
551 return error; 541 return error;
552} 542}
553 543