re PR libbacktrace/88890 (libbacktrace on 32-bit system with _FILE_OFFSET_BITS == 64)
PR libbacktrace/88890 * mmapio.c (backtrace_get_view): Change size parameter to uint64_t. Check that value fits in size_t. * read.c (backtrace_get_view): Likewise. * internal.h (backtrace_get_view): Update declaration. * elf.c (elf_add): Pass shstrhdr->sh_size to backtrace_get_view. From-SVN: r268082
This commit is contained in:
parent
89ce81fbe1
commit
8b248c17bd
5 changed files with 25 additions and 4 deletions
|
@ -1,3 +1,12 @@
|
|||
2019-01-18 Ian Lance Taylor <iant@golang.org>
|
||||
|
||||
PR libbacktrace/88890
|
||||
* mmapio.c (backtrace_get_view): Change size parameter to
|
||||
uint64_t. Check that value fits in size_t.
|
||||
* read.c (backtrace_get_view): Likewise.
|
||||
* internal.h (backtrace_get_view): Update declaration.
|
||||
* elf.c (elf_add): Pass shstrhdr->sh_size to backtrace_get_view.
|
||||
|
||||
2019-01-17 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
PR libbacktrace/82857
|
||||
|
|
|
@ -2813,7 +2813,7 @@ elf_add (struct backtrace_state *state, const char *filename, int descriptor,
|
|||
shstr_size = shstrhdr->sh_size;
|
||||
shstr_off = shstrhdr->sh_offset;
|
||||
|
||||
if (!backtrace_get_view (state, descriptor, shstr_off, shstr_size,
|
||||
if (!backtrace_get_view (state, descriptor, shstr_off, shstrhdr->sh_size,
|
||||
error_callback, data, &names_view))
|
||||
goto fail;
|
||||
names_view_valid = 1;
|
||||
|
|
|
@ -179,7 +179,7 @@ struct backtrace_view
|
|||
/* Create a view of SIZE bytes from DESCRIPTOR at OFFSET. Store the
|
||||
result in *VIEW. Returns 1 on success, 0 on error. */
|
||||
extern int backtrace_get_view (struct backtrace_state *state, int descriptor,
|
||||
off_t offset, size_t size,
|
||||
off_t offset, uint64_t size,
|
||||
backtrace_error_callback error_callback,
|
||||
void *data, struct backtrace_view *view);
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ POSSIBILITY OF SUCH DAMAGE. */
|
|||
|
||||
int
|
||||
backtrace_get_view (struct backtrace_state *state ATTRIBUTE_UNUSED,
|
||||
int descriptor, off_t offset, size_t size,
|
||||
int descriptor, off_t offset, uint64_t size,
|
||||
backtrace_error_callback error_callback,
|
||||
void *data, struct backtrace_view *view)
|
||||
{
|
||||
|
@ -60,6 +60,12 @@ backtrace_get_view (struct backtrace_state *state ATTRIBUTE_UNUSED,
|
|||
off_t pageoff;
|
||||
void *map;
|
||||
|
||||
if ((uint64_t) (size_t) size != size)
|
||||
{
|
||||
error_callback (data, "file size too large", 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pagesize = getpagesize ();
|
||||
inpage = offset % pagesize;
|
||||
pageoff = offset - inpage;
|
||||
|
|
|
@ -46,12 +46,18 @@ POSSIBILITY OF SUCH DAMAGE. */
|
|||
|
||||
int
|
||||
backtrace_get_view (struct backtrace_state *state, int descriptor,
|
||||
off_t offset, size_t size,
|
||||
off_t offset, uint64_t size,
|
||||
backtrace_error_callback error_callback,
|
||||
void *data, struct backtrace_view *view)
|
||||
{
|
||||
ssize_t got;
|
||||
|
||||
if ((uint64_t) (size_t) size != size)
|
||||
{
|
||||
error_callback (data, "file size too large", 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (lseek (descriptor, offset, SEEK_SET) < 0)
|
||||
{
|
||||
error_callback (data, "lseek", errno);
|
||||
|
|
Loading…
Add table
Reference in a new issue