diff options
Diffstat (limited to 'usr.sbin/kldxref/elf.c')
-rw-r--r-- | usr.sbin/kldxref/elf.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/usr.sbin/kldxref/elf.c b/usr.sbin/kldxref/elf.c index e5fe90169d2c..a93cf996ccc7 100644 --- a/usr.sbin/kldxref/elf.c +++ b/usr.sbin/kldxref/elf.c @@ -198,6 +198,24 @@ elf_read_raw_data_alloc(struct elf_file *efile, off_t offset, size_t len, } int +elf_read_raw_string(struct elf_file *efile, off_t offset, char *dst, size_t len) +{ + ssize_t nread; + + nread = pread(efile->ef_fd, dst, len, offset); + if (nread == -1) + return (errno); + if (nread == 0) + return (EIO); + + /* A short read is ok so long as the data contains a terminator. */ + if (strnlen(dst, nread) == nread) + return (EFAULT); + + return (0); +} + +int elf_read_data(struct elf_file *efile, Elf_Type type, off_t offset, size_t len, void **out) { |