kernel: syspread: avoid negative offsets in dir reads
Should also fix CID 160109: Dereference after null check
This commit is contained in:
parent
da588d69ec
commit
21b5682a43
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of Jehanne.
|
* This file is part of Jehanne.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015-2016 Giacomo Tesio <giacomo@tesio.it>
|
* Copyright (C) 2015-2017 Giacomo Tesio <giacomo@tesio.it>
|
||||||
*
|
*
|
||||||
* Jehanne is free software: you can redistribute it and/or modify
|
* Jehanne is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -611,6 +611,7 @@ syspread(int fd, void *p, long n, int64_t off)
|
||||||
* the target device/server, but with a negative length
|
* the target device/server, but with a negative length
|
||||||
* to read the buffer must be nil
|
* to read the buffer must be nil
|
||||||
*/
|
*/
|
||||||
|
InvalidAddress:
|
||||||
pprint("trap: invalid address %#p/%ld in pread pc=%#P\n", p, n, userpc(nil));
|
pprint("trap: invalid address %#p/%ld in pread pc=%#P\n", p, n, userpc(nil));
|
||||||
postnote(up, 1, "sys: bad address in pread", NDebug);
|
postnote(up, 1, "sys: bad address in pread", NDebug);
|
||||||
error(Ebadarg);
|
error(Ebadarg);
|
||||||
|
@ -641,6 +642,14 @@ syspread(int fd, void *p, long n, int64_t off)
|
||||||
sequential = 0;
|
sequential = 0;
|
||||||
}
|
}
|
||||||
if(c->qid.type & QTDIR){
|
if(c->qid.type & QTDIR){
|
||||||
|
if(p == nil){
|
||||||
|
/* With union mount we can't use negative
|
||||||
|
* offsets on directories as it's impossible
|
||||||
|
* to predict which fs support them and
|
||||||
|
* how they interpret them.
|
||||||
|
*/
|
||||||
|
goto InvalidAddress;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Directory read:
|
* Directory read:
|
||||||
* rewind to the beginning of the file if necessary;
|
* rewind to the beginning of the file if necessary;
|
||||||
|
|
Loading…
Reference in New Issue