mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-21 19:26:22 +02:00
util/nvmutil: verify final offset in pwrite/pread
Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
@@ -1952,6 +1952,7 @@ prw(int fd, void *mem, size_t nrw,
|
|||||||
int loop_eagain, int loop_eintr)
|
int loop_eagain, int loop_eintr)
|
||||||
{
|
{
|
||||||
off_t off_orig;
|
off_t off_orig;
|
||||||
|
off_t off_last;
|
||||||
ssize_t r;
|
ssize_t r;
|
||||||
int saved_errno;
|
int saved_errno;
|
||||||
int positional_rw;
|
int positional_rw;
|
||||||
@@ -2022,11 +2023,14 @@ real_pread_pwrite:
|
|||||||
|| errno == try_err(loop_eagain, EAGAIN)));
|
|| errno == try_err(loop_eagain, EAGAIN)));
|
||||||
|
|
||||||
saved_errno = errno;
|
saved_errno = errno;
|
||||||
if (lseek_loop(fd, off_orig, SEEK_SET,
|
off_last = lseek_loop(fd, off_orig, SEEK_SET,
|
||||||
loop_eagain, loop_eintr) == (off_t)-1) {
|
loop_eagain, loop_eintr);
|
||||||
|
if (off_last == (off_t)-1) {
|
||||||
errno = saved_errno;
|
errno = saved_errno;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
if (off_last != off_orig)
|
||||||
|
goto err_prw;
|
||||||
errno = saved_errno;
|
errno = saved_errno;
|
||||||
|
|
||||||
return rw_over_nrw(r, nrw);
|
return rw_over_nrw(r, nrw);
|
||||||
|
|||||||
Reference in New Issue
Block a user