* fs/afs/dir_search.c:155 afs_dir_search_bucket() warn: potential spectre issue 'block->dirents' [r] (local cap)
@ 2025-12-13 13:01 kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2025-12-13 13:01 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: David Howells <dhowells@redhat.com>
CC: Christian Brauner <brauner@kernel.org>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 9d9c1cfec01cdbf24bd9322ed555713a20422115
commit: a5b5beebcf96d5e8a2fc79856c2ac1e93f82478e afs: Use the contained hashtable to search a directory
date: 12 months ago
:::::: branch date: 4 hours ago
:::::: commit date: 12 months ago
config: arm64-randconfig-r071-20251211 (https://download.01.org/0day-ci/archive/20251213/202512132017.RftO5LB3-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 6ec8c4351cfc1d0627d1633b02ea787bd29c77d8)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202512132017.RftO5LB3-lkp@intel.com/
smatch warnings:
fs/afs/dir_search.c:155 afs_dir_search_bucket() warn: potential spectre issue 'block->dirents' [r] (local cap)
vim +155 fs/afs/dir_search.c
a5b5beebcf96d5 David Howells 2024-12-16 119
a5b5beebcf96d5 David Howells 2024-12-16 120 /*
a5b5beebcf96d5 David Howells 2024-12-16 121 * Search through a directory bucket.
a5b5beebcf96d5 David Howells 2024-12-16 122 */
a5b5beebcf96d5 David Howells 2024-12-16 123 int afs_dir_search_bucket(struct afs_dir_iter *iter, const struct qstr *name,
a5b5beebcf96d5 David Howells 2024-12-16 124 struct afs_fid *_fid)
a5b5beebcf96d5 David Howells 2024-12-16 125 {
a5b5beebcf96d5 David Howells 2024-12-16 126 const union afs_xdr_dir_block *meta;
a5b5beebcf96d5 David Howells 2024-12-16 127 unsigned int entry;
a5b5beebcf96d5 David Howells 2024-12-16 128 int ret = -ESTALE;
a5b5beebcf96d5 David Howells 2024-12-16 129
a5b5beebcf96d5 David Howells 2024-12-16 130 meta = afs_dir_find_block(iter, 0);
a5b5beebcf96d5 David Howells 2024-12-16 131 if (!meta)
a5b5beebcf96d5 David Howells 2024-12-16 132 return -ESTALE;
a5b5beebcf96d5 David Howells 2024-12-16 133
a5b5beebcf96d5 David Howells 2024-12-16 134 entry = ntohs(meta->meta.hashtable[iter->bucket & (AFS_DIR_HASHTBL_SIZE - 1)]);
a5b5beebcf96d5 David Howells 2024-12-16 135 _enter("%x,%x", iter->bucket, entry);
a5b5beebcf96d5 David Howells 2024-12-16 136
a5b5beebcf96d5 David Howells 2024-12-16 137 while (entry) {
a5b5beebcf96d5 David Howells 2024-12-16 138 const union afs_xdr_dir_block *block;
a5b5beebcf96d5 David Howells 2024-12-16 139 const union afs_xdr_dirent *dire;
a5b5beebcf96d5 David Howells 2024-12-16 140 unsigned int blnum = entry / AFS_DIR_SLOTS_PER_BLOCK;
a5b5beebcf96d5 David Howells 2024-12-16 141 unsigned int slot = entry % AFS_DIR_SLOTS_PER_BLOCK;
a5b5beebcf96d5 David Howells 2024-12-16 142 unsigned int resv = (blnum == 0 ? AFS_DIR_RESV_BLOCKS0 : AFS_DIR_RESV_BLOCKS);
a5b5beebcf96d5 David Howells 2024-12-16 143
a5b5beebcf96d5 David Howells 2024-12-16 144 _debug("search %x", entry);
a5b5beebcf96d5 David Howells 2024-12-16 145
a5b5beebcf96d5 David Howells 2024-12-16 146 if (slot < resv) {
a5b5beebcf96d5 David Howells 2024-12-16 147 kdebug("slot out of range h=%x rs=%2x sl=%2x-%2x",
a5b5beebcf96d5 David Howells 2024-12-16 148 iter->bucket, resv, slot, slot + iter->nr_slots - 1);
a5b5beebcf96d5 David Howells 2024-12-16 149 goto bad;
a5b5beebcf96d5 David Howells 2024-12-16 150 }
a5b5beebcf96d5 David Howells 2024-12-16 151
a5b5beebcf96d5 David Howells 2024-12-16 152 block = afs_dir_find_block(iter, blnum);
a5b5beebcf96d5 David Howells 2024-12-16 153 if (!block)
a5b5beebcf96d5 David Howells 2024-12-16 154 goto bad;
a5b5beebcf96d5 David Howells 2024-12-16 @155 dire = &block->dirents[slot];
a5b5beebcf96d5 David Howells 2024-12-16 156
a5b5beebcf96d5 David Howells 2024-12-16 157 if (slot + iter->nr_slots <= AFS_DIR_SLOTS_PER_BLOCK &&
a5b5beebcf96d5 David Howells 2024-12-16 158 memcmp(dire->u.name, name->name, name->len) == 0 &&
a5b5beebcf96d5 David Howells 2024-12-16 159 dire->u.name[name->len] == '\0') {
a5b5beebcf96d5 David Howells 2024-12-16 160 _fid->vnode = ntohl(dire->u.vnode);
a5b5beebcf96d5 David Howells 2024-12-16 161 _fid->unique = ntohl(dire->u.unique);
a5b5beebcf96d5 David Howells 2024-12-16 162 ret = entry;
a5b5beebcf96d5 David Howells 2024-12-16 163 goto found;
a5b5beebcf96d5 David Howells 2024-12-16 164 }
a5b5beebcf96d5 David Howells 2024-12-16 165
a5b5beebcf96d5 David Howells 2024-12-16 166 iter->prev_entry = entry;
a5b5beebcf96d5 David Howells 2024-12-16 167 entry = ntohs(dire->u.hash_next);
a5b5beebcf96d5 David Howells 2024-12-16 168 if (!--iter->loop_check) {
a5b5beebcf96d5 David Howells 2024-12-16 169 kdebug("dir chain loop h=%x", iter->bucket);
a5b5beebcf96d5 David Howells 2024-12-16 170 goto bad;
a5b5beebcf96d5 David Howells 2024-12-16 171 }
a5b5beebcf96d5 David Howells 2024-12-16 172 }
a5b5beebcf96d5 David Howells 2024-12-16 173
a5b5beebcf96d5 David Howells 2024-12-16 174 ret = -ENOENT;
a5b5beebcf96d5 David Howells 2024-12-16 175 found:
a5b5beebcf96d5 David Howells 2024-12-16 176 if (iter->block) {
a5b5beebcf96d5 David Howells 2024-12-16 177 kunmap_local(iter->block);
a5b5beebcf96d5 David Howells 2024-12-16 178 iter->block = NULL;
a5b5beebcf96d5 David Howells 2024-12-16 179 }
a5b5beebcf96d5 David Howells 2024-12-16 180
a5b5beebcf96d5 David Howells 2024-12-16 181 bad:
a5b5beebcf96d5 David Howells 2024-12-16 182 if (ret == -ESTALE)
a5b5beebcf96d5 David Howells 2024-12-16 183 afs_invalidate_dir(iter->dvnode, afs_dir_invalid_iter_stale);
a5b5beebcf96d5 David Howells 2024-12-16 184 _leave(" = %d", ret);
a5b5beebcf96d5 David Howells 2024-12-16 185 return ret;
a5b5beebcf96d5 David Howells 2024-12-16 186 }
a5b5beebcf96d5 David Howells 2024-12-16 187
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 2+ messages in thread* fs/afs/dir_search.c:155 afs_dir_search_bucket() warn: potential spectre issue 'block->dirents' [r] (local cap)
@ 2025-12-11 22:57 kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2025-12-11 22:57 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: David Howells <dhowells@redhat.com>
CC: Christian Brauner <brauner@kernel.org>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: d358e5254674b70f34c847715ca509e46eb81e6f
commit: a5b5beebcf96d5e8a2fc79856c2ac1e93f82478e afs: Use the contained hashtable to search a directory
date: 12 months ago
:::::: branch date: 20 hours ago
:::::: commit date: 12 months ago
config: arm64-randconfig-r071-20251211 (https://download.01.org/0day-ci/archive/20251212/202512120622.av4gYfkD-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 6ec8c4351cfc1d0627d1633b02ea787bd29c77d8)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202512120622.av4gYfkD-lkp@intel.com/
smatch warnings:
fs/afs/dir_search.c:155 afs_dir_search_bucket() warn: potential spectre issue 'block->dirents' [r] (local cap)
vim +155 fs/afs/dir_search.c
a5b5beebcf96d5 David Howells 2024-12-16 119
a5b5beebcf96d5 David Howells 2024-12-16 120 /*
a5b5beebcf96d5 David Howells 2024-12-16 121 * Search through a directory bucket.
a5b5beebcf96d5 David Howells 2024-12-16 122 */
a5b5beebcf96d5 David Howells 2024-12-16 123 int afs_dir_search_bucket(struct afs_dir_iter *iter, const struct qstr *name,
a5b5beebcf96d5 David Howells 2024-12-16 124 struct afs_fid *_fid)
a5b5beebcf96d5 David Howells 2024-12-16 125 {
a5b5beebcf96d5 David Howells 2024-12-16 126 const union afs_xdr_dir_block *meta;
a5b5beebcf96d5 David Howells 2024-12-16 127 unsigned int entry;
a5b5beebcf96d5 David Howells 2024-12-16 128 int ret = -ESTALE;
a5b5beebcf96d5 David Howells 2024-12-16 129
a5b5beebcf96d5 David Howells 2024-12-16 130 meta = afs_dir_find_block(iter, 0);
a5b5beebcf96d5 David Howells 2024-12-16 131 if (!meta)
a5b5beebcf96d5 David Howells 2024-12-16 132 return -ESTALE;
a5b5beebcf96d5 David Howells 2024-12-16 133
a5b5beebcf96d5 David Howells 2024-12-16 134 entry = ntohs(meta->meta.hashtable[iter->bucket & (AFS_DIR_HASHTBL_SIZE - 1)]);
a5b5beebcf96d5 David Howells 2024-12-16 135 _enter("%x,%x", iter->bucket, entry);
a5b5beebcf96d5 David Howells 2024-12-16 136
a5b5beebcf96d5 David Howells 2024-12-16 137 while (entry) {
a5b5beebcf96d5 David Howells 2024-12-16 138 const union afs_xdr_dir_block *block;
a5b5beebcf96d5 David Howells 2024-12-16 139 const union afs_xdr_dirent *dire;
a5b5beebcf96d5 David Howells 2024-12-16 140 unsigned int blnum = entry / AFS_DIR_SLOTS_PER_BLOCK;
a5b5beebcf96d5 David Howells 2024-12-16 141 unsigned int slot = entry % AFS_DIR_SLOTS_PER_BLOCK;
a5b5beebcf96d5 David Howells 2024-12-16 142 unsigned int resv = (blnum == 0 ? AFS_DIR_RESV_BLOCKS0 : AFS_DIR_RESV_BLOCKS);
a5b5beebcf96d5 David Howells 2024-12-16 143
a5b5beebcf96d5 David Howells 2024-12-16 144 _debug("search %x", entry);
a5b5beebcf96d5 David Howells 2024-12-16 145
a5b5beebcf96d5 David Howells 2024-12-16 146 if (slot < resv) {
a5b5beebcf96d5 David Howells 2024-12-16 147 kdebug("slot out of range h=%x rs=%2x sl=%2x-%2x",
a5b5beebcf96d5 David Howells 2024-12-16 148 iter->bucket, resv, slot, slot + iter->nr_slots - 1);
a5b5beebcf96d5 David Howells 2024-12-16 149 goto bad;
a5b5beebcf96d5 David Howells 2024-12-16 150 }
a5b5beebcf96d5 David Howells 2024-12-16 151
a5b5beebcf96d5 David Howells 2024-12-16 152 block = afs_dir_find_block(iter, blnum);
a5b5beebcf96d5 David Howells 2024-12-16 153 if (!block)
a5b5beebcf96d5 David Howells 2024-12-16 154 goto bad;
a5b5beebcf96d5 David Howells 2024-12-16 @155 dire = &block->dirents[slot];
a5b5beebcf96d5 David Howells 2024-12-16 156
a5b5beebcf96d5 David Howells 2024-12-16 157 if (slot + iter->nr_slots <= AFS_DIR_SLOTS_PER_BLOCK &&
a5b5beebcf96d5 David Howells 2024-12-16 158 memcmp(dire->u.name, name->name, name->len) == 0 &&
a5b5beebcf96d5 David Howells 2024-12-16 159 dire->u.name[name->len] == '\0') {
a5b5beebcf96d5 David Howells 2024-12-16 160 _fid->vnode = ntohl(dire->u.vnode);
a5b5beebcf96d5 David Howells 2024-12-16 161 _fid->unique = ntohl(dire->u.unique);
a5b5beebcf96d5 David Howells 2024-12-16 162 ret = entry;
a5b5beebcf96d5 David Howells 2024-12-16 163 goto found;
a5b5beebcf96d5 David Howells 2024-12-16 164 }
a5b5beebcf96d5 David Howells 2024-12-16 165
a5b5beebcf96d5 David Howells 2024-12-16 166 iter->prev_entry = entry;
a5b5beebcf96d5 David Howells 2024-12-16 167 entry = ntohs(dire->u.hash_next);
a5b5beebcf96d5 David Howells 2024-12-16 168 if (!--iter->loop_check) {
a5b5beebcf96d5 David Howells 2024-12-16 169 kdebug("dir chain loop h=%x", iter->bucket);
a5b5beebcf96d5 David Howells 2024-12-16 170 goto bad;
a5b5beebcf96d5 David Howells 2024-12-16 171 }
a5b5beebcf96d5 David Howells 2024-12-16 172 }
a5b5beebcf96d5 David Howells 2024-12-16 173
a5b5beebcf96d5 David Howells 2024-12-16 174 ret = -ENOENT;
a5b5beebcf96d5 David Howells 2024-12-16 175 found:
a5b5beebcf96d5 David Howells 2024-12-16 176 if (iter->block) {
a5b5beebcf96d5 David Howells 2024-12-16 177 kunmap_local(iter->block);
a5b5beebcf96d5 David Howells 2024-12-16 178 iter->block = NULL;
a5b5beebcf96d5 David Howells 2024-12-16 179 }
a5b5beebcf96d5 David Howells 2024-12-16 180
a5b5beebcf96d5 David Howells 2024-12-16 181 bad:
a5b5beebcf96d5 David Howells 2024-12-16 182 if (ret == -ESTALE)
a5b5beebcf96d5 David Howells 2024-12-16 183 afs_invalidate_dir(iter->dvnode, afs_dir_invalid_iter_stale);
a5b5beebcf96d5 David Howells 2024-12-16 184 _leave(" = %d", ret);
a5b5beebcf96d5 David Howells 2024-12-16 185 return ret;
a5b5beebcf96d5 David Howells 2024-12-16 186 }
a5b5beebcf96d5 David Howells 2024-12-16 187
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-12-13 13:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-13 13:01 fs/afs/dir_search.c:155 afs_dir_search_bucket() warn: potential spectre issue 'block->dirents' [r] (local cap) kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2025-12-11 22:57 kernel test robot
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.