Skip to content

Commit

Permalink
mm: mmap: increase sockets maximum memory size pgoff for 32bits
Browse files Browse the repository at this point in the history
The AF_XDP sockets umem mapping interface uses XDP_UMEM_PGOFF_FILL_RING
and XDP_UMEM_PGOFF_COMPLETION_RING offsets.  These offsets are
established already and are part of the configuration interface.

But for 32-bit systems, using AF_XDP socket configuration, these values
are too large to pass the maximum allowed file size verification.  The
offsets can be tuned off, but instead of changing the existing
interface, let's extend the max allowed file size for sockets.

No one has been using this until this patch with 32 bits as without
this fix af_xdp sockets can't be used at all, so it unblocks af_xdp
socket usage for 32bit systems.

All list of mmap cbs for sockets was verified for side effects and all
of them contain dummy cb - sock_no_mmap() at this moment, except the
following:

xsk_mmap() - it's what this fix is needed for.
tcp_mmap() - doesn't have obvious issues with pgoff - no any references on it.
packet_mmap() - return -EINVAL if it's even set.

Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Ivan Khoronzhuk <[email protected]>
Reviewed-by: Andrew Morton <[email protected]>
Cc: Björn Töpel <[email protected]>
Cc: Alexei Starovoitov <[email protected]>
Cc: Magnus Karlsson <[email protected]>
Cc: Daniel Borkmann <[email protected]>
Cc: David Miller <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
ikhorn authored and torvalds committed Sep 24, 2019
1 parent 73848a9 commit 76f3495
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions mm/mmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1358,6 +1358,9 @@ static inline u64 file_mmap_size_max(struct file *file, struct inode *inode)
if (S_ISBLK(inode->i_mode))
return MAX_LFS_FILESIZE;

if (S_ISSOCK(inode->i_mode))
return MAX_LFS_FILESIZE;

/* Special "we do even unsigned file positions" case */
if (file->f_mode & FMODE_UNSIGNED_OFFSET)
return 0;
Expand Down

0 comments on commit 76f3495

Please sign in to comment.