]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/suse-2.6.27.31/patches.fixes/mm-madvise-fix.patch
Move xen patchset to new version's subdir.
[ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.fixes / mm-madvise-fix.patch
CommitLineData
00e5a55c
BS
1From: Nick Piggin <npiggin@suse.de>
2Subject: mm: madvise correct return code
3References: bnc#352998
4
5madvise should return -EINVAL if passed in an invalid flag, even if the
6requested range is 0.
7
8Signed-off-by: Nick Piggin <npiggin@suse.de>
9---
10---
11 mm/madvise.c | 23 ++++++++++++++++++++++-
12 1 file changed, 22 insertions(+), 1 deletion(-)
13
14--- a/mm/madvise.c
15+++ b/mm/madvise.c
16@@ -247,12 +247,30 @@ madvise_vma(struct vm_area_struct *vma,
17 break;
18
19 default:
20- error = -EINVAL;
21+ BUG();
22 break;
23 }
24 return error;
25 }
26
27+static int
28+madvise_behavior_valid(int behavior)
29+{
30+ switch (behavior) {
31+ case MADV_DOFORK:
32+ case MADV_DONTFORK:
33+ case MADV_NORMAL:
34+ case MADV_SEQUENTIAL:
35+ case MADV_RANDOM:
36+ case MADV_REMOVE:
37+ case MADV_WILLNEED:
38+ case MADV_DONTNEED:
39+ return 1;
40+
41+ default:
42+ return 0;
43+ }
44+}
45 /*
46 * The madvise(2) system call.
47 *
48@@ -298,6 +316,9 @@ SYSCALL_DEFINE3(madvise, unsigned long,
49 int write;
50 size_t len;
51
52+ if (!madvise_behavior_valid(behavior))
53+ return error;
54+
55 write = madvise_need_mmap_write(behavior);
56 if (write)
57 down_write(&current->mm->mmap_sem);