tree: git://git.samba.org/ksmbd.git for-next head: 1b028682528ca86559cad5311eb52b57333cecf0 commit: 028ef0e246faa6432a713e4c67e89266555277e7 [5/8] cifs: Fix xid leak in cifs_ses_add_channel() config: mips-randconfig-r025-20221018 compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 791a7ae1ba3efd6bca96338e10ffde557ba83920) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install mips cross compiling tool for clang build # apt-get install binutils-mips-linux-gnu git remote add samba-ksmbd git://git.samba.org/ksmbd.git git fetch --no-tags samba-ksmbd for-next git checkout 028ef0e246faa6432a713e4c67e89266555277e7 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash drivers/pinctrl/ fs/cifs/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot All warnings (new ones prefixed by >>): >> fs/cifs/sess.c:160:5: warning: stack frame size (1040) exceeds limit (1024) in 'cifs_try_adding_channels' [-Wframe-larger-than] int cifs_try_adding_channels(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses) ^ 1 warning generated. vim +/cifs_try_adding_channels +160 fs/cifs/sess.c b54034a73baf9f Shyam Prasad N 2022-01-03 158 d70e9fa5588476 Aurelien Aptel 2019-09-20 159 /* returns number of channels added */ 387ec58f339b0c Ronnie Sahlberg 2020-12-14 @160 int cifs_try_adding_channels(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses) d70e9fa5588476 Aurelien Aptel 2019-09-20 161 { 724244cdb38285 Shyam Prasad N 2021-07-19 162 int old_chan_count, new_chan_count; 724244cdb38285 Shyam Prasad N 2021-07-19 163 int left; d70e9fa5588476 Aurelien Aptel 2019-09-20 164 int rc = 0; 65a37a34145ca6 Aurelien Aptel 2019-11-20 165 int tries = 0; aa45dadd34e44f Shyam Prasad N 2022-01-01 166 struct cifs_server_iface *iface = NULL, *niface = NULL; d70e9fa5588476 Aurelien Aptel 2019-09-20 167 724244cdb38285 Shyam Prasad N 2021-07-19 168 spin_lock(&ses->chan_lock); 724244cdb38285 Shyam Prasad N 2021-07-19 169 724244cdb38285 Shyam Prasad N 2021-07-19 170 new_chan_count = old_chan_count = ses->chan_count; 724244cdb38285 Shyam Prasad N 2021-07-19 171 left = ses->chan_max - ses->chan_count; 724244cdb38285 Shyam Prasad N 2021-07-19 172 d70e9fa5588476 Aurelien Aptel 2019-09-20 173 if (left <= 0) { 88b024f556fcd5 Shyam Prasad N 2021-11-19 174 spin_unlock(&ses->chan_lock); d70e9fa5588476 Aurelien Aptel 2019-09-20 175 cifs_dbg(FYI, d70e9fa5588476 Aurelien Aptel 2019-09-20 176 "ses already at max_channels (%zu), nothing to open\n", d70e9fa5588476 Aurelien Aptel 2019-09-20 177 ses->chan_max); d70e9fa5588476 Aurelien Aptel 2019-09-20 178 return 0; d70e9fa5588476 Aurelien Aptel 2019-09-20 179 } d70e9fa5588476 Aurelien Aptel 2019-09-20 180 53923e0fe2098f Steve French 2022-02-16 181 if (ses->server->dialect < SMB30_PROT_ID) { 53923e0fe2098f Steve French 2022-02-16 182 spin_unlock(&ses->chan_lock); 53923e0fe2098f Steve French 2022-02-16 183 cifs_dbg(VFS, "multichannel is not supported on this protocol version, use 3.0 or above\n"); 53923e0fe2098f Steve French 2022-02-16 184 return 0; 53923e0fe2098f Steve French 2022-02-16 185 } 53923e0fe2098f Steve French 2022-02-16 186 9c2dc11df50d1c Steve French 2021-05-07 187 if (!(ses->server->capabilities & SMB2_GLOBAL_CAP_MULTI_CHANNEL)) { 9c2dc11df50d1c Steve French 2021-05-07 188 ses->chan_max = 1; 724244cdb38285 Shyam Prasad N 2021-07-19 189 spin_unlock(&ses->chan_lock); 0226487ad81464 Steve French 2021-11-15 190 cifs_dbg(VFS, "server %s does not support multichannel\n", ses->server->hostname); 9c2dc11df50d1c Steve French 2021-05-07 191 return 0; 9c2dc11df50d1c Steve French 2021-05-07 192 } 724244cdb38285 Shyam Prasad N 2021-07-19 193 spin_unlock(&ses->chan_lock); 9c2dc11df50d1c Steve French 2021-05-07 194 65a37a34145ca6 Aurelien Aptel 2019-11-20 195 /* 65a37a34145ca6 Aurelien Aptel 2019-11-20 196 * Keep connecting to same, fastest, iface for all channels as 65a37a34145ca6 Aurelien Aptel 2019-11-20 197 * long as its RSS. Try next fastest one if not RSS or channel 65a37a34145ca6 Aurelien Aptel 2019-11-20 198 * creation fails. 65a37a34145ca6 Aurelien Aptel 2019-11-20 199 */ aa45dadd34e44f Shyam Prasad N 2022-01-01 200 spin_lock(&ses->iface_lock); aa45dadd34e44f Shyam Prasad N 2022-01-01 201 iface = list_first_entry(&ses->iface_list, struct cifs_server_iface, aa45dadd34e44f Shyam Prasad N 2022-01-01 202 iface_head); aa45dadd34e44f Shyam Prasad N 2022-01-01 203 spin_unlock(&ses->iface_lock); aa45dadd34e44f Shyam Prasad N 2022-01-01 204 65a37a34145ca6 Aurelien Aptel 2019-11-20 205 while (left > 0) { d70e9fa5588476 Aurelien Aptel 2019-09-20 206 65a37a34145ca6 Aurelien Aptel 2019-11-20 207 tries++; 65a37a34145ca6 Aurelien Aptel 2019-11-20 208 if (tries > 3*ses->chan_max) { bbbf9eafbfdaa2 Steve French 2020-05-30 209 cifs_dbg(FYI, "too many channel open attempts (%d channels left to open)\n", 65a37a34145ca6 Aurelien Aptel 2019-11-20 210 left); 65a37a34145ca6 Aurelien Aptel 2019-11-20 211 break; 65a37a34145ca6 Aurelien Aptel 2019-11-20 212 } 65a37a34145ca6 Aurelien Aptel 2019-11-20 213 aa45dadd34e44f Shyam Prasad N 2022-01-01 214 spin_lock(&ses->iface_lock); aa45dadd34e44f Shyam Prasad N 2022-01-01 215 if (!ses->iface_count) { aa45dadd34e44f Shyam Prasad N 2022-01-01 216 spin_unlock(&ses->iface_lock); aa45dadd34e44f Shyam Prasad N 2022-01-01 217 break; aa45dadd34e44f Shyam Prasad N 2022-01-01 218 } aa45dadd34e44f Shyam Prasad N 2022-01-01 219 aa45dadd34e44f Shyam Prasad N 2022-01-01 220 list_for_each_entry_safe_from(iface, niface, &ses->iface_list, aa45dadd34e44f Shyam Prasad N 2022-01-01 221 iface_head) { aa45dadd34e44f Shyam Prasad N 2022-01-01 222 /* skip ifaces that are unusable */ aa45dadd34e44f Shyam Prasad N 2022-01-01 223 if (!iface->is_active || aa45dadd34e44f Shyam Prasad N 2022-01-01 224 (is_ses_using_iface(ses, iface) && aa45dadd34e44f Shyam Prasad N 2022-01-01 225 !iface->rss_capable)) { d70e9fa5588476 Aurelien Aptel 2019-09-20 226 continue; 65a37a34145ca6 Aurelien Aptel 2019-11-20 227 } d70e9fa5588476 Aurelien Aptel 2019-09-20 228 aa45dadd34e44f Shyam Prasad N 2022-01-01 229 /* take ref before unlock */ aa45dadd34e44f Shyam Prasad N 2022-01-01 230 kref_get(&iface->refcount); aa45dadd34e44f Shyam Prasad N 2022-01-01 231 aa45dadd34e44f Shyam Prasad N 2022-01-01 232 spin_unlock(&ses->iface_lock); 387ec58f339b0c Ronnie Sahlberg 2020-12-14 233 rc = cifs_ses_add_channel(cifs_sb, ses, iface); aa45dadd34e44f Shyam Prasad N 2022-01-01 234 spin_lock(&ses->iface_lock); aa45dadd34e44f Shyam Prasad N 2022-01-01 235 d70e9fa5588476 Aurelien Aptel 2019-09-20 236 if (rc) { aa45dadd34e44f Shyam Prasad N 2022-01-01 237 cifs_dbg(VFS, "failed to open extra channel on iface:%pIS rc=%d\n", aa45dadd34e44f Shyam Prasad N 2022-01-01 238 &iface->sockaddr, aa45dadd34e44f Shyam Prasad N 2022-01-01 239 rc); aa45dadd34e44f Shyam Prasad N 2022-01-01 240 kref_put(&iface->refcount, release_iface); d70e9fa5588476 Aurelien Aptel 2019-09-20 241 continue; d70e9fa5588476 Aurelien Aptel 2019-09-20 242 } d70e9fa5588476 Aurelien Aptel 2019-09-20 243 aa45dadd34e44f Shyam Prasad N 2022-01-01 244 cifs_dbg(FYI, "successfully opened new channel on iface:%pIS\n", aa45dadd34e44f Shyam Prasad N 2022-01-01 245 &iface->sockaddr); aa45dadd34e44f Shyam Prasad N 2022-01-01 246 break; aa45dadd34e44f Shyam Prasad N 2022-01-01 247 } aa45dadd34e44f Shyam Prasad N 2022-01-01 248 spin_unlock(&ses->iface_lock); aa45dadd34e44f Shyam Prasad N 2022-01-01 249 d70e9fa5588476 Aurelien Aptel 2019-09-20 250 left--; 724244cdb38285 Shyam Prasad N 2021-07-19 251 new_chan_count++; d70e9fa5588476 Aurelien Aptel 2019-09-20 252 } d70e9fa5588476 Aurelien Aptel 2019-09-20 253 724244cdb38285 Shyam Prasad N 2021-07-19 254 return new_chan_count - old_chan_count; d70e9fa5588476 Aurelien Aptel 2019-09-20 255 } d70e9fa5588476 Aurelien Aptel 2019-09-20 256 :::::: The code at line 160 was first introduced by commit :::::: 387ec58f339b0c45e3767395f11fa8dd3772131e cifs: simplify handling of cifs_sb/ctx->local_nls :::::: TO: Ronnie Sahlberg :::::: CC: Steve French -- 0-DAY CI Kernel Test Service https://01.org/lkp