i.e. 32bit userspace reading /proc/kcore on a 64bit kernel with max_size
should not needlessly fail.
/* Be prepared for files from /proc which generally report a file size of 0. */
assert_cc(READ_FULL_BYTES_MAX < SSIZE_MAX);
if (st.st_size > 0) {
- if (st.st_size > SSIZE_MAX) /* Avoid overflow with 32-bit size_t and 64-bit off_t. */
- return -EFBIG;
+ if (st.st_size > SSIZE_MAX) { /* Avoid overflow with 32-bit size_t and 64-bit off_t. */
- size = MIN((size_t) st.st_size, max_size);
- if (size > READ_FULL_BYTES_MAX)
- return -EFBIG;
+ if (max_size == SIZE_MAX)
+ return -EFBIG;
+
+ size = max_size;
+ } else {
+ size = MIN((size_t) st.st_size, max_size);
+
+ if (size > READ_FULL_BYTES_MAX)
+ return -EFBIG;
+ }
n_retries--;
} else {