diff options
| author | Richard Weinberger <richard@nod.at> | 2016-01-02 17:09:47 -0500 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-01-09 02:55:18 -0500 |
| commit | 0b2a6f231dcbc7bd543a5aaa23b0ea76ce16e585 (patch) | |
| tree | f004ae94d6d88cdb16d6d04db66203530c873d7e | |
| parent | bdb97e91e0140230bda9a83f6dbaa29b0c2e0522 (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.c | 38 |
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); |
| 359 | out: | 357 | out: |
| 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 | ||
