X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2Fread_write.c;h=a091ee4f430df6cc83317b59c4a2fc363c005080;hb=e4543eddfd3bf3e0d625841377fa695a519edfd4;hp=563abd09b5c84b882cbe6f47e56d05e80e5db4b6;hpb=e0d7ff168a71299919f01500b3d507aae0c67513;p=linux-2.6 diff --git a/fs/read_write.c b/fs/read_write.c index 563abd09b5..a091ee4f43 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -188,7 +188,7 @@ int rw_verify_area(int read_write, struct file *file, loff_t *ppos, size_t count struct inode *inode; loff_t pos; - if (unlikely(count > file->f_maxcount)) + if (unlikely(count > INT_MAX)) goto Einval; pos = *ppos; if (unlikely((pos < 0) || (loff_t) (pos + count) < 0)) @@ -497,6 +497,9 @@ static ssize_t do_readv_writev(int type, struct file *file, } ret = rw_verify_area(type, file, pos, tot_len); + if (ret) + goto out; + ret = security_file_permission(file, type == READ ? MAY_READ : MAY_WRITE); if (ret) goto out;