|
@@ -381,6 +381,9 @@ static ssize_t read_kmem(struct file *file, char __user *buf,
|
|
char *kbuf; /* k-addr because vread() takes vmlist_lock rwlock */
|
|
char *kbuf; /* k-addr because vread() takes vmlist_lock rwlock */
|
|
int err = 0;
|
|
int err = 0;
|
|
|
|
|
|
|
|
+ if (!pfn_valid(PFN_DOWN(p)))
|
|
|
|
+ return -EIO;
|
|
|
|
+
|
|
read = 0;
|
|
read = 0;
|
|
if (p < (unsigned long) high_memory) {
|
|
if (p < (unsigned long) high_memory) {
|
|
low_count = count;
|
|
low_count = count;
|
|
@@ -509,6 +512,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf,
|
|
char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
|
|
char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
|
|
int err = 0;
|
|
int err = 0;
|
|
|
|
|
|
|
|
+ if (!pfn_valid(PFN_DOWN(p)))
|
|
|
|
+ return -EIO;
|
|
|
|
+
|
|
if (p < (unsigned long) high_memory) {
|
|
if (p < (unsigned long) high_memory) {
|
|
unsigned long to_write = min_t(unsigned long, count,
|
|
unsigned long to_write = min_t(unsigned long, count,
|
|
(unsigned long)high_memory - p);
|
|
(unsigned long)high_memory - p);
|