As realloc returns NULL on failure, the original value will be
overwritten if it is used as lvalue. Fix this by using a temporary
variable to hold the return value and exit with -ENOMEM in case of
failure. This patch fixes 2 of the realloc blocks with similar fix.
Signed-off-by: Sandeep Dhavale <dhavale@google.com>
Link: https://lore.kernel.org/r/20240718202204.1224620-1-dhavale@google.com
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
if (compressed) {
if (map.m_llen > buffer_size) {
+ char *newbuffer;
+
buffer_size = map.m_llen;
- buffer = realloc(buffer, buffer_size);
- BUG_ON(!buffer);
+ newbuffer = realloc(buffer, buffer_size);
+ if (!newbuffer) {
+ ret = -ENOMEM;
+ goto out;
+ }
+ buffer = newbuffer;
}
ret = z_erofs_read_one_data(inode, &map, raw, buffer,
0, map.m_llen, false);
}
if (map.m_plen > bufsize) {
+ char *newraw;
+
bufsize = map.m_plen;
- raw = realloc(raw, bufsize);
- if (!raw) {
+ newraw = realloc(raw, bufsize);
+ if (!newraw) {
ret = -ENOMEM;
break;
}
+ raw = newraw;
}
ret = z_erofs_read_one_data(inode, &map, raw,