Преглед на файлове

mm/nommu.c: add additional check for vread() just like vwrite() has done

vwrite() checks for overflow. vread() should do the same thing.

Since vwrite() checks the source buffer address, vread() should check
the destination buffer address.

Signed-off-by: Chen Gang <gang.chen@asianux.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Michel Lespinasse <walken@google.com>
Cc: Rik van Riel <riel@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Chen Gang преди 12 години
родител
ревизия
9bde916bc7
променени са 1 файла, в които са добавени 4 реда и са изтрити 0 реда
  1. 4 0
      mm/nommu.c

+ 4 - 0
mm/nommu.c

@@ -282,6 +282,10 @@ EXPORT_SYMBOL(vmalloc_to_pfn);
 
 
 long vread(char *buf, char *addr, unsigned long count)
 long vread(char *buf, char *addr, unsigned long count)
 {
 {
+	/* Don't allow overflow */
+	if ((unsigned long) buf + count < count)
+		count = -(unsigned long) buf;
+
 	memcpy(buf, addr, count);
 	memcpy(buf, addr, count);
 	return count;
 	return count;
 }
 }