mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 05:52:36 +02:00
@@ -465,7 +465,6 @@ int io_args(int fd, void *mem, size_t nrw,
|
|||||||
off_t off, int rw_type);
|
off_t off, int rw_type);
|
||||||
int check_file(int fd, struct stat *st);
|
int check_file(int fd, struct stat *st);
|
||||||
ssize_t rw_over_nrw(ssize_t r, size_t nrw);
|
ssize_t rw_over_nrw(ssize_t r, size_t nrw);
|
||||||
int off_retry(int saved_errno, off_t rval);
|
|
||||||
int sys_retry(int saved_errno, long rval);
|
int sys_retry(int saved_errno, long rval);
|
||||||
int fs_retry(int saved_errno, int rval);
|
int fs_retry(int saved_errno, int rval);
|
||||||
int rw_retry(int saved_errno, ssize_t rval);
|
int rw_retry(int saved_errno, ssize_t rval);
|
||||||
|
|||||||
@@ -762,18 +762,6 @@ xclose(int *fd)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* retry switch for offset-based
|
|
||||||
* functions e.g. lseek
|
|
||||||
*/
|
|
||||||
/* retry switch for functions that
|
|
||||||
return long status e.g. linux syscall
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
off_retry(int saved_errno, off_t rval)
|
|
||||||
{
|
|
||||||
fs_err_retry();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* retry switch for functions that
|
/* retry switch for functions that
|
||||||
return long status e.g. linux syscall
|
return long status e.g. linux syscall
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -156,24 +156,24 @@ retry_rand: {
|
|||||||
|
|
||||||
#if defined(USE_URANDOM) && \
|
#if defined(USE_URANDOM) && \
|
||||||
((USE_URANDOM) > 0)
|
((USE_URANDOM) > 0)
|
||||||
ssize_t rc;
|
ssize_t rval;
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
|
|
||||||
open_file_on_eintr("/dev/urandom", &fd, O_RDONLY, 0400, NULL);
|
open_file_on_eintr("/dev/urandom", &fd, O_RDONLY, 0400, NULL);
|
||||||
|
|
||||||
while (rw_retry(saved_errno,
|
while (rw_retry(saved_errno,
|
||||||
rc = rw(fd, (unsigned char *)buf + off, n - off, 0, IO_READ)));
|
rval = rw(fd, (unsigned char *)buf + off, n - off, 0, IO_READ)));
|
||||||
#elif defined(__linux__)
|
#elif defined(__linux__)
|
||||||
long rc;
|
long rval;
|
||||||
while (sys_retry(saved_errno,
|
while (sys_retry(saved_errno,
|
||||||
rc = syscall(SYS_getrandom,
|
rval = syscall(SYS_getrandom,
|
||||||
(unsigned char *)buf + off, n - off, 0)));
|
(unsigned char *)buf + off, n - off, 0)));
|
||||||
#else
|
#else
|
||||||
#error Unsupported operating system (possibly unsecure randomisation)
|
#error Unsupported operating system (possibly unsecure randomisation)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (rc < 0 || /* syscall fehler */
|
if (rval < 0 || /* syscall fehler */
|
||||||
rc == 0) { /* prevent infinite loop on fatal err */
|
rval == 0) { /* prevent infinite loop on fatal err */
|
||||||
#if defined(USE_URANDOM) && \
|
#if defined(USE_URANDOM) && \
|
||||||
((USE_URANDOM) > 0)
|
((USE_URANDOM) > 0)
|
||||||
xclose(&fd);
|
xclose(&fd);
|
||||||
@@ -181,7 +181,7 @@ retry_rand: {
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((off += (size_t)rc) < n)
|
if ((off += (size_t)rval) < n)
|
||||||
goto retry_rand;
|
goto retry_rand;
|
||||||
|
|
||||||
#if defined(USE_URANDOM) && \
|
#if defined(USE_URANDOM) && \
|
||||||
|
|||||||
Reference in New Issue
Block a user