From: "Darrick J. Wong" <darrick.wong@oracle.com> To: torvalds@linux-foundation.org Cc: Christoph Hellwig <hch@infradead.org>, david@fromorbit.com, viro@ZenIV.linux.org.uk, linux-xfs@vger.kernel.org, "Kirill A. Shutemov" <kirill@shutemov.name>, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org Subject: [PATCH] vfs: cap dedupe request structure size at PAGE_SIZE Date: Wed, 14 Sep 2016 20:20:44 -0700 [thread overview] Message-ID: <20160915032044.GB9309@birch.djwong.org> (raw) Kirill A. Shutemov reports that the kernel doesn't try to cap dest_count in any way, and uses the number to allocate kernel memory. This causes high order allocation warnings in the kernel log if someone passes in a big enough value. We should clamp the allocation at PAGE_SIZE to avoid stressing the VM. The two existing users of the dedupe ioctl never send more than 120 requests, so we can safely clamp dest_range at PAGE_SIZE, because with 4k pages we can handle up to 127 dedupe candidates. Given the max extent length of 16MB, we can end up doing 2GB of IO which is plenty. Reported-by: "Kirill A. Shutemov" <kirill@shutemov.name> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> --- fs/ioctl.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/ioctl.c b/fs/ioctl.c index 26aba09..c415668 100644 --- a/fs/ioctl.c +++ b/fs/ioctl.c @@ -582,6 +582,10 @@ static int ioctl_file_dedupe_range(struct file *file, void __user *arg) } size = offsetof(struct file_dedupe_range __user, info[count]); + if (size > PAGE_SIZE) { + ret = -ENOMEM; + goto out; + } same = memdup_user(argp, size); if (IS_ERR(same)) {
WARNING: multiple messages have this Message-ID (diff)
From: "Darrick J. Wong" <darrick.wong@oracle.com> To: torvalds@linux-foundation.org Cc: linux-xfs@vger.kernel.org, linux-api@vger.kernel.org, xfs@oss.sgi.com, Christoph Hellwig <hch@infradead.org>, viro@ZenIV.linux.org.uk, linux-fsdevel@vger.kernel.org, "Kirill A. Shutemov" <kirill@shutemov.name> Subject: [PATCH] vfs: cap dedupe request structure size at PAGE_SIZE Date: Wed, 14 Sep 2016 20:20:44 -0700 [thread overview] Message-ID: <20160915032044.GB9309@birch.djwong.org> (raw) Kirill A. Shutemov reports that the kernel doesn't try to cap dest_count in any way, and uses the number to allocate kernel memory. This causes high order allocation warnings in the kernel log if someone passes in a big enough value. We should clamp the allocation at PAGE_SIZE to avoid stressing the VM. The two existing users of the dedupe ioctl never send more than 120 requests, so we can safely clamp dest_range at PAGE_SIZE, because with 4k pages we can handle up to 127 dedupe candidates. Given the max extent length of 16MB, we can end up doing 2GB of IO which is plenty. Reported-by: "Kirill A. Shutemov" <kirill@shutemov.name> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> --- fs/ioctl.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/ioctl.c b/fs/ioctl.c index 26aba09..c415668 100644 --- a/fs/ioctl.c +++ b/fs/ioctl.c @@ -582,6 +582,10 @@ static int ioctl_file_dedupe_range(struct file *file, void __user *arg) } size = offsetof(struct file_dedupe_range __user, info[count]); + if (size > PAGE_SIZE) { + ret = -ENOMEM; + goto out; + } same = memdup_user(argp, size); if (IS_ERR(same)) { _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs
next reply other threads:[~2016-09-15 3:21 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-09-15 3:20 Darrick J. Wong [this message] 2016-09-15 3:20 ` [PATCH] vfs: cap dedupe request structure size at PAGE_SIZE Darrick J. Wong -- strict thread matches above, loose matches on Subject: below -- 2016-07-28 18:35 Darrick J. Wong 2016-07-28 18:35 ` Darrick J. Wong 2016-07-28 18:35 ` Darrick J. Wong 2016-08-01 6:31 ` Christoph Hellwig 2016-08-01 6:31 ` Christoph Hellwig 2016-08-01 6:31 ` Christoph Hellwig 2016-08-02 2:35 ` Mark Fasheh 2016-08-02 2:35 ` Mark Fasheh
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20160915032044.GB9309@birch.djwong.org \ --to=darrick.wong@oracle.com \ --cc=david@fromorbit.com \ --cc=hch@infradead.org \ --cc=kirill@shutemov.name \ --cc=linux-api@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-xfs@vger.kernel.org \ --cc=torvalds@linux-foundation.org \ --cc=viro@ZenIV.linux.org.uk \ --cc=xfs@oss.sgi.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.