diff options
| -rw-r--r-- | kernel/seccomp.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/kernel/seccomp.c b/kernel/seccomp.c index 61bd9dc260c8..1245b2338fff 100644 --- a/kernel/seccomp.c +++ b/kernel/seccomp.c | |||
| @@ -1076,14 +1076,16 @@ long seccomp_get_metadata(struct task_struct *task, | |||
| 1076 | 1076 | ||
| 1077 | size = min_t(unsigned long, size, sizeof(kmd)); | 1077 | size = min_t(unsigned long, size, sizeof(kmd)); |
| 1078 | 1078 | ||
| 1079 | if (copy_from_user(&kmd, data, size)) | 1079 | if (size < sizeof(kmd.filter_off)) |
| 1080 | return -EINVAL; | ||
| 1081 | |||
| 1082 | if (copy_from_user(&kmd.filter_off, data, sizeof(kmd.filter_off))) | ||
| 1080 | return -EFAULT; | 1083 | return -EFAULT; |
| 1081 | 1084 | ||
| 1082 | filter = get_nth_filter(task, kmd.filter_off); | 1085 | filter = get_nth_filter(task, kmd.filter_off); |
| 1083 | if (IS_ERR(filter)) | 1086 | if (IS_ERR(filter)) |
| 1084 | return PTR_ERR(filter); | 1087 | return PTR_ERR(filter); |
| 1085 | 1088 | ||
| 1086 | memset(&kmd, 0, sizeof(kmd)); | ||
| 1087 | if (filter->log) | 1089 | if (filter->log) |
| 1088 | kmd.flags |= SECCOMP_FILTER_FLAG_LOG; | 1090 | kmd.flags |= SECCOMP_FILTER_FLAG_LOG; |
| 1089 | 1091 | ||
