mirror of https://gitee.com/openkylin/linux.git
Char/Misc fixes for 5.13-rc1
Here are 2 char/misc fixes for 5.13-rc1 to resolve reported issues. The first is a bugfix for the nitro_enclaves driver that fixed some important problems. The second was a dyndbg bugfix that resolved some reported problems in dynamic debugging control. Both have been in linux-next for a while with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCYJJFmQ8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ykpowCff/wOixaV6OWnXj1MIBDZ+Gi9TL8AoI09AsXI 8oQih9hKMDqMnUZI6gc5 =GQUJ -----END PGP SIGNATURE----- Merge tag 'char-misc-5.13-rc1-round2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc Pull char/misc driver fixes from Greg KH: "Here are two char/misc fixes for 5.13-rc1 to resolve reported issues. The first is a bugfix for the nitro_enclaves driver that fixed some important problems. The second was a dyndbg bugfix that resolved some reported problems in dynamic debugging control. Both have been in linux-next for a while with no reported issues" * tag 'char-misc-5.13-rc1-round2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: dyndbg: fix parsing file query without a line-range suffix nitro_enclaves: Fix stale file descriptors on failed usercopy
This commit is contained in:
commit
5a5bcd43d5
|
@ -1524,7 +1524,8 @@ static const struct file_operations ne_enclave_fops = {
|
|||
* enclave file descriptor to be further used for enclave
|
||||
* resources handling e.g. memory regions and CPUs.
|
||||
* @ne_pci_dev : Private data associated with the PCI device.
|
||||
* @slot_uid: Generated unique slot id associated with an enclave.
|
||||
* @slot_uid: User pointer to store the generated unique slot id
|
||||
* associated with an enclave to.
|
||||
*
|
||||
* Context: Process context. This function is called with the ne_pci_dev enclave
|
||||
* mutex held.
|
||||
|
@ -1532,7 +1533,7 @@ static const struct file_operations ne_enclave_fops = {
|
|||
* * Enclave fd on success.
|
||||
* * Negative return value on failure.
|
||||
*/
|
||||
static int ne_create_vm_ioctl(struct ne_pci_dev *ne_pci_dev, u64 *slot_uid)
|
||||
static int ne_create_vm_ioctl(struct ne_pci_dev *ne_pci_dev, u64 __user *slot_uid)
|
||||
{
|
||||
struct ne_pci_dev_cmd_reply cmd_reply = {};
|
||||
int enclave_fd = -1;
|
||||
|
@ -1634,7 +1635,18 @@ static int ne_create_vm_ioctl(struct ne_pci_dev *ne_pci_dev, u64 *slot_uid)
|
|||
|
||||
list_add(&ne_enclave->enclave_list_entry, &ne_pci_dev->enclaves_list);
|
||||
|
||||
*slot_uid = ne_enclave->slot_uid;
|
||||
if (copy_to_user(slot_uid, &ne_enclave->slot_uid, sizeof(ne_enclave->slot_uid))) {
|
||||
/*
|
||||
* As we're holding the only reference to 'enclave_file', fput()
|
||||
* will call ne_enclave_release() which will do a proper cleanup
|
||||
* of all so far allocated resources, leaving only the unused fd
|
||||
* for us to free.
|
||||
*/
|
||||
fput(enclave_file);
|
||||
put_unused_fd(enclave_fd);
|
||||
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
fd_install(enclave_fd, enclave_file);
|
||||
|
||||
|
@ -1671,34 +1683,13 @@ static long ne_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|||
switch (cmd) {
|
||||
case NE_CREATE_VM: {
|
||||
int enclave_fd = -1;
|
||||
struct file *enclave_file = NULL;
|
||||
struct ne_pci_dev *ne_pci_dev = ne_devs.ne_pci_dev;
|
||||
int rc = -EINVAL;
|
||||
u64 slot_uid = 0;
|
||||
u64 __user *slot_uid = (void __user *)arg;
|
||||
|
||||
mutex_lock(&ne_pci_dev->enclaves_list_mutex);
|
||||
|
||||
enclave_fd = ne_create_vm_ioctl(ne_pci_dev, &slot_uid);
|
||||
if (enclave_fd < 0) {
|
||||
rc = enclave_fd;
|
||||
|
||||
enclave_fd = ne_create_vm_ioctl(ne_pci_dev, slot_uid);
|
||||
mutex_unlock(&ne_pci_dev->enclaves_list_mutex);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
mutex_unlock(&ne_pci_dev->enclaves_list_mutex);
|
||||
|
||||
if (copy_to_user((void __user *)arg, &slot_uid, sizeof(slot_uid))) {
|
||||
enclave_file = fget(enclave_fd);
|
||||
/* Decrement file refs to have release() called. */
|
||||
fput(enclave_file);
|
||||
fput(enclave_file);
|
||||
put_unused_fd(enclave_fd);
|
||||
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return enclave_fd;
|
||||
}
|
||||
|
||||
|
|
|
@ -396,7 +396,7 @@ static int ddebug_parse_query(char *words[], int nwords,
|
|||
/* tail :$info is function or line-range */
|
||||
fline = strchr(query->filename, ':');
|
||||
if (!fline)
|
||||
break;
|
||||
continue;
|
||||
*fline++ = '\0';
|
||||
if (isalpha(*fline) || *fline == '*' || *fline == '?') {
|
||||
/* take as function name */
|
||||
|
|
Loading…
Reference in New Issue