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
|
* enclave file descriptor to be further used for enclave
|
||||||
* resources handling e.g. memory regions and CPUs.
|
* resources handling e.g. memory regions and CPUs.
|
||||||
* @ne_pci_dev : Private data associated with the PCI device.
|
* @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
|
* Context: Process context. This function is called with the ne_pci_dev enclave
|
||||||
* mutex held.
|
* mutex held.
|
||||||
|
@ -1532,7 +1533,7 @@ static const struct file_operations ne_enclave_fops = {
|
||||||
* * Enclave fd on success.
|
* * Enclave fd on success.
|
||||||
* * Negative return value on failure.
|
* * 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 = {};
|
struct ne_pci_dev_cmd_reply cmd_reply = {};
|
||||||
int enclave_fd = -1;
|
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);
|
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);
|
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) {
|
switch (cmd) {
|
||||||
case NE_CREATE_VM: {
|
case NE_CREATE_VM: {
|
||||||
int enclave_fd = -1;
|
int enclave_fd = -1;
|
||||||
struct file *enclave_file = NULL;
|
|
||||||
struct ne_pci_dev *ne_pci_dev = ne_devs.ne_pci_dev;
|
struct ne_pci_dev *ne_pci_dev = ne_devs.ne_pci_dev;
|
||||||
int rc = -EINVAL;
|
u64 __user *slot_uid = (void __user *)arg;
|
||||||
u64 slot_uid = 0;
|
|
||||||
|
|
||||||
mutex_lock(&ne_pci_dev->enclaves_list_mutex);
|
mutex_lock(&ne_pci_dev->enclaves_list_mutex);
|
||||||
|
enclave_fd = ne_create_vm_ioctl(ne_pci_dev, slot_uid);
|
||||||
enclave_fd = ne_create_vm_ioctl(ne_pci_dev, &slot_uid);
|
|
||||||
if (enclave_fd < 0) {
|
|
||||||
rc = enclave_fd;
|
|
||||||
|
|
||||||
mutex_unlock(&ne_pci_dev->enclaves_list_mutex);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_unlock(&ne_pci_dev->enclaves_list_mutex);
|
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;
|
return enclave_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -396,7 +396,7 @@ static int ddebug_parse_query(char *words[], int nwords,
|
||||||
/* tail :$info is function or line-range */
|
/* tail :$info is function or line-range */
|
||||||
fline = strchr(query->filename, ':');
|
fline = strchr(query->filename, ':');
|
||||||
if (!fline)
|
if (!fline)
|
||||||
break;
|
continue;
|
||||||
*fline++ = '\0';
|
*fline++ = '\0';
|
||||||
if (isalpha(*fline) || *fline == '*' || *fline == '?') {
|
if (isalpha(*fline) || *fline == '*' || *fline == '?') {
|
||||||
/* take as function name */
|
/* take as function name */
|
||||||
|
|
Loading…
Reference in New Issue