CIFS VFS: error -22 on ioctl to get interface list

Bug #1864131 reported by Toshikazu Aoyama
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
linux-azure (Ubuntu)
New
Undecided
Unassigned

Bug Description

Problem:
Following error logged when mounting Azure file share with CIFS 3.0 protocol.

[ 4856.227895] CIFS VFS: error -22 on ioctl to get interface list

It looks like linux-azure kernel > 5 has some cifs bug. (It might be reproducible with a upstream kernel as well.)
This is not reproducible with -o 2.1 mount option or linux-azure 4.15.
And It can be easily reproducible with platform image like Canonical:UbuntuServer:18.04-LTS:18.04.202002180.

What I have done to reproduce:
VM create CLI command
 $ az vm create --resource-group rgname --name cifsubuntu --image Canonical:UbuntuServer:18.04-LTS:18.04.202002180

mount command
 # mount -t cifs //accountname.file.core.windows.net/test /mnt/somewhere -o vers=3.0,credentials=/etc/smbcredentials/cred.cred --verbose

Do you have any knowledge about this?
As far as I research, SMB2_ioctl which is in cifs kernel module send some invalid parameter to the server.

Here is a debug log.

[  156.667830] SMB2_ioctl:2506: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/smb2pdu.c: SMB2 IOCTL
[  156.667836] smb3_init_transform_rq:3164: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/smb2ops.c: encrypt message returned 0
[  156.667840] __smb_send_rqst:341: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/transport.c: Sending smb: smb_len=177
[  156.668906] cifs_demultiplex_thread:1184: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/connect.c: RFC1002 header 0x7d
[  156.668914] decrypt_raw_data:3205: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/smb2ops.c: decrypt message returned 0
[  156.668915] receive_encrypted_standard:3533: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/smb2ops.c: mid found
[  156.668916] smb2_calc_size:421: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/smb2misc.c: SMB2 data length 0 offset 0
[  156.668917] smb2_calc_size:439: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/smb2misc.c: SMB2 len 73
[  156.668918] smb2_add_credits:122: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/smb2ops.c: add 2 credits total=39
[  156.668924] cifs_sync_mid_result:708: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/transport.c: cifs_sync_mid_result: cmd=11 mid=8 state=4
[  156.668925] Status code returned 0xc000000d STATUS_INVALID_PARAMETER
[  156.668929] map_smb2_to_linux_error:2484: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/smb2maperror.c: Mapping SMB2 status code 0xc000000d to POSIX err -22
[  156.668930] cifs_small_buf_release:222: /build/linux-azure-ZlnYF6/linux-azure-5.0.0/fs/cifs/misc.c: Null buffer passed to cifs_small_buf_release
[  156.668931] CIFS VFS: error -22 on ioctl to get interface list

To enable the debug, I have done following command before mount.
# modprobe cifs
# echo 'module cifs +lfp' > /sys/kernel/debug/dynamic_debug/control
# echo 'file fs/cifs/* +lfp' > /sys/kernel/debug/dynamic_debug/control
# echo 7 > /proc/fs/cifs/cifsFYI

I am not sure but it looks like following SMB2_ioctl has some invalid argument.

"fs/cifs/smb2ops.c"
516 static int
 517 SMB3_request_interfaces(const unsigned int xid, struct cifs_tcon *tcon)
 518 {
 519         int rc;
 520         unsigned int ret_data_len = 0;
 521         struct network_interface_info_ioctl_rsp *out_buf = NULL;
 522         struct cifs_server_iface *iface_list;
 523         size_t iface_count;
 524         struct cifs_ses *ses = tcon->ses;
 525
 526         rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,
 527                         FSCTL_QUERY_NETWORK_INTERFACE_INFO, true /* is_fsctl */,
 528                         NULL /* no data input */, 0 /* no data input */,
 529                         (char **)&out_buf, &ret_data_len);
 530         if (rc == -EOPNOTSUPP) {
 531                 cifs_dbg(FYI,
 532                          "server does not support query network interfaces\n");
 533                 goto out;
 534         } else if (rc != 0) {
 535                 cifs_dbg(VFS, "error %d on ioctl to get interface list\n", rc);
 536                 goto out;

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.