Commit 84d2f07e authored by Steve French's avatar Steve French

CIFS: cifs_writepages should not write beyond end of file

Signed-off-by: default avatarDave Kleikamp <shaggy@austin.ibm.com>
Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent 47c786e7
...@@ -1011,6 +1011,7 @@ static int cifs_writepages(struct address_space *mapping, ...@@ -1011,6 +1011,7 @@ static int cifs_writepages(struct address_space *mapping,
pgoff_t index; pgoff_t index;
int is_range = 0; int is_range = 0;
struct kvec iov[32]; struct kvec iov[32];
int len;
int n_iov = 0; int n_iov = 0;
pgoff_t next; pgoff_t next;
int nr_pages; int nr_pages;
...@@ -1124,16 +1125,26 @@ static int cifs_writepages(struct address_space *mapping, ...@@ -1124,16 +1125,26 @@ static int cifs_writepages(struct address_space *mapping,
unlock_page(page); unlock_page(page);
break; break;
} }
if (page_offset(page) >= mapping->host->i_size) {
done = 1;
unlock_page(page);
break;
}
/* /*
* BB can we get rid of this? pages are held by pvec * BB can we get rid of this? pages are held by pvec
*/ */
page_cache_get(page); page_cache_get(page);
len = min(mapping->host->i_size - page_offset(page),
(loff_t)PAGE_CACHE_SIZE);
/* reserve iov[0] for the smb header */ /* reserve iov[0] for the smb header */
n_iov++; n_iov++;
iov[n_iov].iov_base = kmap(page); iov[n_iov].iov_base = kmap(page);
iov[n_iov].iov_len = PAGE_CACHE_SIZE; iov[n_iov].iov_len = len;
bytes_to_write += PAGE_CACHE_SIZE; bytes_to_write += len;
if (first < 0) { if (first < 0) {
first = i; first = i;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment