| From f79b94647051d9cf4c2431a17cb108c2fad22bc3 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 10 Jan 2025 16:39:13 +0100 |
| Subject: landlock: Handle weird files |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Mickaël Salaün <mic@digikod.net> |
| |
| [ Upstream commit 49440290a0935f428a1e43a5ac8dc275a647ff80 ] |
| |
| A corrupted filesystem (e.g. bcachefs) might return weird files. |
| Instead of throwing a warning and allowing access to such file, treat |
| them as regular files. |
| |
| Cc: Dave Chinner <david@fromorbit.com> |
| Cc: Kent Overstreet <kent.overstreet@linux.dev> |
| Cc: Paul Moore <paul@paul-moore.com> |
| Reported-by: syzbot+34b68f850391452207df@syzkaller.appspotmail.com |
| Closes: https://lore.kernel.org/r/000000000000a65b35061cffca61@google.com |
| Reported-by: syzbot+360866a59e3c80510a62@syzkaller.appspotmail.com |
| Closes: https://lore.kernel.org/r/67379b3f.050a0220.85a0.0001.GAE@google.com |
| Reported-by: Ubisectech Sirius <bugreport@ubisectech.com> |
| Closes: https://lore.kernel.org/r/c426821d-8380-46c4-a494-7008bbd7dd13.bugreport@ubisectech.com |
| Fixes: cb2c7d1a1776 ("landlock: Support filesystem access-control") |
| Reviewed-by: Günther Noack <gnoack3000@gmail.com> |
| Link: https://lore.kernel.org/r/20250110153918.241810-1-mic@digikod.net |
| Signed-off-by: Mickaël Salaün <mic@digikod.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| security/landlock/fs.c | 11 +++++------ |
| 1 file changed, 5 insertions(+), 6 deletions(-) |
| |
| diff --git a/security/landlock/fs.c b/security/landlock/fs.c |
| index e31b97a9f175a..7adb25150488f 100644 |
| --- a/security/landlock/fs.c |
| +++ b/security/landlock/fs.c |
| @@ -937,10 +937,6 @@ static access_mask_t get_mode_access(const umode_t mode) |
| switch (mode & S_IFMT) { |
| case S_IFLNK: |
| return LANDLOCK_ACCESS_FS_MAKE_SYM; |
| - case 0: |
| - /* A zero mode translates to S_IFREG. */ |
| - case S_IFREG: |
| - return LANDLOCK_ACCESS_FS_MAKE_REG; |
| case S_IFDIR: |
| return LANDLOCK_ACCESS_FS_MAKE_DIR; |
| case S_IFCHR: |
| @@ -951,9 +947,12 @@ static access_mask_t get_mode_access(const umode_t mode) |
| return LANDLOCK_ACCESS_FS_MAKE_FIFO; |
| case S_IFSOCK: |
| return LANDLOCK_ACCESS_FS_MAKE_SOCK; |
| + case S_IFREG: |
| + case 0: |
| + /* A zero mode translates to S_IFREG. */ |
| default: |
| - WARN_ON_ONCE(1); |
| - return 0; |
| + /* Treats weird files as regular files. */ |
| + return LANDLOCK_ACCESS_FS_MAKE_REG; |
| } |
| } |
| |
| -- |
| 2.39.5 |
| |