diff options
author | Robert Morris <[email protected]> | 2019-09-20 13:09:26 -0400 |
---|---|---|
committer | Robert Morris <[email protected]> | 2019-09-20 13:09:26 -0400 |
commit | 7c7ed208221dbd115c7cc88faa0e42150cfa14a2 (patch) | |
tree | f37450d7fc3017c63c6dd50afc68800b3c294bfb /kernel/fs.c | |
parent | e1a37303c89696a110c61a156768ea15cc03a246 (diff) | |
download | xv6-labs-7c7ed208221dbd115c7cc88faa0e42150cfa14a2.tar.gz xv6-labs-7c7ed208221dbd115c7cc88faa0e42150cfa14a2.tar.bz2 xv6-labs-7c7ed208221dbd115c7cc88faa0e42150cfa14a2.zip |
don't leak a file system block if the buf argument to write is invalid
and a usertest
Diffstat (limited to 'kernel/fs.c')
-rw-r--r-- | kernel/fs.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/kernel/fs.c b/kernel/fs.c index 5505408..53586d5 100644 --- a/kernel/fs.c +++ b/kernel/fs.c @@ -505,10 +505,15 @@ writei(struct inode *ip, int user_src, uint64 src, uint off, uint n) brelse(bp); } - if(n > 0 && off > ip->size){ - ip->size = off; + if(n > 0){ + if(off > ip->size) + ip->size = off; + // write the i-node back to disk even if the size didn't change + // because the loop above might have called bmap() and added a new + // block to ip->addrs[]. iupdate(ip); } + return n; } |