aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/libdep_plugin.c6
2 files changed, 11 insertions, 1 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index a094af9..7b9fdc8 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2022-05-03 Nick Clifton <nickc@redhat.com>
+
+ PR 29101
+ * libdep_plugin.c (get_libdeps): Check for overflow when computing
+ amount of memory to allocate.
+
2022-04-27 Nick Clifton <nickc@redhat.com>
PR 29006
diff --git a/ld/libdep_plugin.c b/ld/libdep_plugin.c
index 5569aa4..453df71 100644
--- a/ld/libdep_plugin.c
+++ b/ld/libdep_plugin.c
@@ -99,6 +99,7 @@ get_libdeps (int fd)
arhdr ah;
int len;
unsigned long mlen;
+ size_t amt;
linerec *lr;
enum ld_plugin_status rc = LDPS_NO_SYMS;
@@ -114,7 +115,10 @@ get_libdeps (int fd)
lseek (fd, mlen, SEEK_CUR);
continue;
}
- lr = malloc (sizeof (linerec) + mlen);
+ amt = mlen + sizeof (linerec);
+ if (amt <= mlen)
+ return LDPS_ERR;
+ lr = malloc (amt);
if (!lr)
return LDPS_ERR;
lr->next = NULL;