Skip to content

Fix Integer overflow in binary CPIO handler#5089

Open
sectroyer wants to merge 1 commit intoMidnightCommander:masterfrom
sectroyer:master
Open

Fix Integer overflow in binary CPIO handler#5089
sectroyer wants to merge 1 commit intoMidnightCommander:masterfrom
sectroyer:master

Conversation

@sectroyer
Copy link
Copy Markdown

@sectroyer sectroyer commented Apr 6, 2026

Add a bounds check on st_size immediately after it is computed, before it is used in any arithmetic or allocation. A reasonable upper bound for a symlink target is MC_MAXPATHLEN (4096).

@github-actions github-actions bot added needs triage Needs triage by maintainers prio: medium Has the potential to affect progress labels Apr 6, 2026
@github-actions github-actions bot added this to the Future Releases milestone Apr 6, 2026
@zyv zyv modified the milestones: Future Releases, 4.9.0 Apr 6, 2026
@zyv zyv added area: vfs Virtual File System support and removed needs triage Needs triage by maintainers labels Apr 6, 2026
…ndler

Add a bounds check on st_size immediately after it is computed, before it is
used in any arithmetic or allocation. A reasonable upper bound for a symlink
target is MC_MAXPATHLEN (4096).

Signed-off-by: Michał Majchrowicz <sectroyer@gmail.com>
Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
Copy link
Copy Markdown
Member

@zyv zyv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the fix! 👍

@sectroyer sectroyer requested a review from zyv April 15, 2026 16:15
Comment thread src/vfs/cpio/cpio.c
// case?

inode->linkname = g_malloc (st->st_size + 1);
if (st->st_size < 0 || (gsize) st->st_size >= G_MAXSIZE)
Copy link
Copy Markdown
Contributor

@mc-worker mc-worker Apr 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you reduce off_t to gsize? I think, sizeof (off_t) >= sizeof (gsize), so the correct way is

st->st_size >= (off_t) G_MAXSIZE

Comment thread src/vfs/cpio/cpio.c
#endif
st.st_size = ((off_t) u.buf.c_filesizes[0] << 16) | u.buf.c_filesizes[1];

if (st.st_size < 0 || st.st_size > MC_MAXPATHLEN)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you compare file size with path length? It is correct for link not for regular file,

Comment thread src/vfs/cpio/cpio.c
u.st.st_size = hd.c_filesize;

if (u.st.st_size < 0 || u.st.st_size > MC_MAXPATHLEN)
{
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Likewise.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: vfs Virtual File System support prio: medium Has the potential to affect progress

Development

Successfully merging this pull request may close these issues.

Security Issue Report

3 participants