mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-29 18:11:20 +00:00
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull misc vfs updates from Al Viro: "All kinds of misc stuff, without any unifying topic, from various people. Neil's d_anon patch, several bugfixes, introduction of kvmalloc analogue of kmemdup_user(), extending bitfield.h to deal with fixed-endians, assorted cleanups all over the place..." * 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (28 commits) alpha: osf_sys.c: use timespec64 where appropriate alpha: osf_sys.c: fix put_tv32 regression jffs2: Fix use-after-free bug in jffs2_iget()'s error handling path dcache: delete unused d_hash_mask dcache: subtract d_hash_shift from 32 in advance fs/buffer.c: fold init_buffer() into init_page_buffers() fs: fold __inode_permission() into inode_permission() fs: add RWF_APPEND sctp: use vmemdup_user() rather than badly open-coding memdup_user() snd_ctl_elem_init_enum_names(): switch to vmemdup_user() replace_user_tlv(): switch to vmemdup_user() new primitive: vmemdup_user() memdup_user(): switch to GFP_USER eventfd: fold eventfd_ctx_get() into eventfd_ctx_fileget() eventfd: fold eventfd_ctx_read() into eventfd_read() eventfd: convert to use anon_inode_getfd() nfs4file: get rid of pointless include of btrfs.h uvc_v4l2: clean copyin/copyout up vme_user: don't use __copy_..._user() usx2y: don't bother with memdup_user() for 16-byte structure ...
This commit is contained in:
commit
19e7b5f994
28 changed files with 297 additions and 404 deletions
|
@ -25,6 +25,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/time.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/sched/signal.h>
|
||||
#include <sound/core.h>
|
||||
#include <sound/minors.h>
|
||||
|
@ -1129,7 +1130,7 @@ static int replace_user_tlv(struct snd_kcontrol *kctl, unsigned int __user *buf,
|
|||
if (size > 1024 * 128) /* sane value */
|
||||
return -EINVAL;
|
||||
|
||||
container = memdup_user(buf, size);
|
||||
container = vmemdup_user(buf, size);
|
||||
if (IS_ERR(container))
|
||||
return PTR_ERR(container);
|
||||
|
||||
|
@ -1137,7 +1138,7 @@ static int replace_user_tlv(struct snd_kcontrol *kctl, unsigned int __user *buf,
|
|||
if (!change)
|
||||
change = memcmp(ue->tlv_data, container, size) != 0;
|
||||
if (!change) {
|
||||
kfree(container);
|
||||
kvfree(container);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1148,7 +1149,7 @@ static int replace_user_tlv(struct snd_kcontrol *kctl, unsigned int __user *buf,
|
|||
mask = SNDRV_CTL_EVENT_MASK_INFO;
|
||||
}
|
||||
|
||||
kfree(ue->tlv_data);
|
||||
kvfree(ue->tlv_data);
|
||||
ue->tlv_data = container;
|
||||
ue->tlv_data_size = size;
|
||||
|
||||
|
@ -1197,7 +1198,7 @@ static int snd_ctl_elem_init_enum_names(struct user_element *ue)
|
|||
if (ue->info.value.enumerated.names_length > 64 * 1024)
|
||||
return -EINVAL;
|
||||
|
||||
names = memdup_user((const void __user *)user_ptrval,
|
||||
names = vmemdup_user((const void __user *)user_ptrval,
|
||||
ue->info.value.enumerated.names_length);
|
||||
if (IS_ERR(names))
|
||||
return PTR_ERR(names);
|
||||
|
@ -1208,7 +1209,7 @@ static int snd_ctl_elem_init_enum_names(struct user_element *ue)
|
|||
for (i = 0; i < ue->info.value.enumerated.items; ++i) {
|
||||
name_len = strnlen(p, buf_len);
|
||||
if (name_len == 0 || name_len >= 64 || name_len == buf_len) {
|
||||
kfree(names);
|
||||
kvfree(names);
|
||||
return -EINVAL;
|
||||
}
|
||||
p += name_len + 1;
|
||||
|
@ -1225,8 +1226,8 @@ static void snd_ctl_elem_user_free(struct snd_kcontrol *kcontrol)
|
|||
{
|
||||
struct user_element *ue = kcontrol->private_data;
|
||||
|
||||
kfree(ue->tlv_data);
|
||||
kfree(ue->priv_data);
|
||||
kvfree(ue->tlv_data);
|
||||
kvfree(ue->priv_data);
|
||||
kfree(ue);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue