mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 22:24:11 +08:00
cifs: allow dumping keys for directories too
Dumping the enc/dec keys is a session wide operation. And it should not matter if the ioctl was run on a regular file or a directory. Currently, we obtain the tcon pointer from the cifs file handle. But since there's no dir open call in cifs, this is not populated for dirs. This change allows dumping of session keys using ioctl even for directories. To do this, we'll now get the tcon pointer from the superblock, and not from the file handle. Signed-off-by: Shyam Prasad N <sprasad@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
fdf0eaf114
commit
b3edef6b9c
@ -433,16 +433,21 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg)
|
||||
* Dump encryption keys. This is an old ioctl that only
|
||||
* handles AES-128-{CCM,GCM}.
|
||||
*/
|
||||
if (pSMBFile == NULL)
|
||||
break;
|
||||
if (!capable(CAP_SYS_ADMIN)) {
|
||||
rc = -EACCES;
|
||||
break;
|
||||
}
|
||||
|
||||
tcon = tlink_tcon(pSMBFile->tlink);
|
||||
cifs_sb = CIFS_SB(inode->i_sb);
|
||||
tlink = cifs_sb_tlink(cifs_sb);
|
||||
if (IS_ERR(tlink)) {
|
||||
rc = PTR_ERR(tlink);
|
||||
break;
|
||||
}
|
||||
tcon = tlink_tcon(tlink);
|
||||
if (!smb3_encryption_required(tcon)) {
|
||||
rc = -EOPNOTSUPP;
|
||||
cifs_put_tlink(tlink);
|
||||
break;
|
||||
}
|
||||
pkey_inf.cipher_type =
|
||||
@ -459,6 +464,7 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg)
|
||||
rc = -EFAULT;
|
||||
else
|
||||
rc = 0;
|
||||
cifs_put_tlink(tlink);
|
||||
break;
|
||||
case CIFS_DUMP_FULL_KEY:
|
||||
/*
|
||||
@ -470,8 +476,11 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg)
|
||||
rc = -EACCES;
|
||||
break;
|
||||
}
|
||||
tcon = tlink_tcon(pSMBFile->tlink);
|
||||
cifs_sb = CIFS_SB(inode->i_sb);
|
||||
tlink = cifs_sb_tlink(cifs_sb);
|
||||
tcon = tlink_tcon(tlink);
|
||||
rc = cifs_dump_full_key(tcon, (void __user *)arg);
|
||||
cifs_put_tlink(tlink);
|
||||
break;
|
||||
case CIFS_IOC_NOTIFY:
|
||||
if (!S_ISDIR(inode->i_mode)) {
|
||||
|
Loading…
Reference in New Issue
Block a user