Unified · Split
| @@ -2540,21 +2540,20 @@ static int copy_module_from_user(const void __user *umod, unsigned long len, · 2539 unmodified lines | ||
| 2540 | 2540 | /* Sets info->hdr and info->len. */ |
| 2541 | 2541 | static int copy_module_from_fd(int fd, struct load_info *info) |
| 2542 | 2542 | { |
| 2543 | − struct file *file; | |
| 2543 | + struct fd f = fdget(fd); | |
| 2544 | 2544 | int err; |
| 2545 | 2545 | struct kstat stat; |
| 2546 | 2546 | loff_t pos; |
| 2547 | 2547 | ssize_t bytes = 0; |
| 2548 | 2548 | |
| 2549 | − file = fget(fd); | |
| 2550 | − if (!file) | |
| 2549 | + if (!f.file) | |
| 2551 | 2550 | return -ENOEXEC; |
| 2552 | 2551 | |
| 2553 | − err = security_kernel_module_from_file(file); | |
| 2552 | + err = security_kernel_module_from_file(f.file); | |
| 2554 | 2553 | if (err) |
| 2555 | 2554 | goto out; |
| 2556 | 2555 | |
| 2557 | − err = vfs_getattr(&file->f_path, &stat); | |
| 2556 | + err = vfs_getattr(&f.file->f_path, &stat); | |
| 2558 | 2557 | if (err) |
| 2559 | 2558 | goto out; |
| 2560 | 2559 | |
| @@ -2577,7 +2576,7 @@ static int copy_module_from_fd(int fd, struct load_info *info) · 16 unmodified lines | ||
| 2577 | 2576 | |
| 2578 | 2577 | pos = 0; |
| 2579 | 2578 | while (pos < stat.size) { |
| 2580 | − bytes = kernel_read(file, pos, (char *)(info->hdr) + pos, | |
| 2579 | + bytes = kernel_read(f.file, pos, (char *)(info->hdr) + pos, | |
| 2581 | 2580 | stat.size - pos); |
| 2582 | 2581 | if (bytes < 0) { |
| 2583 | 2582 | vfree(info->hdr); |
| @@ -2591,7 +2590,7 @@ static int copy_module_from_fd(int fd, struct load_info *info) · 7 unmodified lines | ||
| 2591 | 2590 | info->len = pos; |
| 2592 | 2591 | |
| 2593 | 2592 | out: |
| 2594 | − fput(file); | |
| 2593 | + fdput(f); | |
| 2595 | 2594 | return err; |
| 2596 | 2595 | } |
| 2597 | 2596 | |