Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
e90d11d
pinctrl: baytrail: Replace WARN with dev_info_once when setting direc…
jwrdegoede Jan 1, 2020
512b18e
pinctrl: baytrail: Fix pin being driven low for a while on gpiod_get(…
jwrdegoede Jun 6, 2020
4a77729
Partially revert bpf: Zero-fill re-used per-cpu map element
Dec 8, 2020
8954745
usb: gadget: f_fs: Use local copy of descriptors for userspace copy
Nov 30, 2020
f0990c2
USB: serial: kl5kusb105: fix memleak on open
jhovold Dec 4, 2020
25b90f8
USB: serial: ch341: add new Product ID for CH341A
AiyionPrime Dec 3, 2020
250930f
USB: serial: ch341: sort device-id entries
jhovold Dec 3, 2020
0f8af69
USB: serial: option: add Fibocom NL668 variants
vpalatin Nov 20, 2020
3cf9494
USB: serial: option: add support for Thales Cinterion EXS82
GiacintoCifelli Nov 25, 2020
013d2d0
USB: serial: option: fix Quectel BG96 matching
bmork Dec 1, 2020
c536ecd
tty: Fix ->pgrp locking in tiocspgrp()
thejh Dec 3, 2020
35ee9ac
tty: Fix ->session locking
thejh Dec 3, 2020
de41002
ALSA: hda/realtek: Fix bass speaker DAC assignment on Asus Zephyrus G14
tiwai Nov 27, 2020
f3fc366
ALSA: hda/realtek: Add mute LED quirk to yet another HP x360 model
tiwai Nov 28, 2020
c57556f
ALSA: hda/realtek: Enable headset of ASUS UX482EG & B9400CEA with ALC294
starnight Nov 24, 2020
f28666e
ALSA: hda/realtek - Add new codec supported for ALC897
KailangYang Nov 27, 2020
d18379b
ALSA: hda/generic: Add option to enforce preferred_dacs pairs
tiwai Nov 27, 2020
205740c
ftrace: Fix updating FTRACE_FL_TRAMP
rnav Nov 26, 2020
a0ca8cb
cifs: allow syscalls to be restarted in __smb_send_rqst()
Nov 28, 2020
73948ab
cifs: fix potential use-after-free in cifs_echo_request()
Nov 28, 2020
ed201cb
i2c: imx: Don't generate STOP condition if arbitration has been lost
ceggers-arri Oct 9, 2020
b92738c
thunderbolt: Fix use-after-free in remove_unplugged_switch()
westeri Nov 18, 2020
812dff6
drm/i915/gt: Program mocs:63 for cache eviction on gen9
ickle Nov 26, 2020
3f680c5
scsi: mpt3sas: Fix ioctl timeout
suganathprabu0512 Nov 25, 2020
8a758e9
dm writecache: fix the maximum number of arguments
Nov 10, 2020
6466119
powerpc/64s/powernv: Fix memory corruption when saving SLB entries on…
npiggin Nov 28, 2020
1f72986
genirq/irqdomain: Add an irq_create_mapping_affinity() function
vivier Nov 26, 2020
7eb5140
powerpc/pseries: Pass MSI affinity to irq_create_mapping()
vivier Nov 26, 2020
3b02d67
dm: fix bug with RCU locking in dm_blk_report_zones
SergeiShtepa Nov 11, 2020
002d2c4
dm: remove invalid sparse __acquires and __releases annotations
snitm Dec 4, 2020
579c977
x86/uprobes: Do not use prefixes.nbytes when looping over prefixes.bytes
mhiramat Dec 3, 2020
42ccf9d
coredump: fix core_pattern parse error
Dec 6, 2020
4870004
mm: list_lru: set shrinker map bit when child nr_items is not zero
yang-shi Dec 6, 2020
a2a163f
mm/swapfile: do not sleep with a spin lock held
Dec 6, 2020
b0d4fa1
speakup: Reject setting the speakup line discipline outside of speakup
sthibaul Nov 29, 2020
83366a7
i2c: imx: Fix reset of I2SR_IAL flag
ceggers-arri Oct 9, 2020
83d5121
i2c: imx: Check for I2SR_IAL after every byte
ceggers-arri Oct 9, 2020
d863a4a
spi: bcm2835: Release the DMA channel if probe fails after dma_init
Dec 6, 2020
dbbf6cd
iommu/amd: Set DTE[IntTabLen] to represent 512 IRTEs
ssuthiku-amd Dec 7, 2020
f68f5bd
tracing: Fix userstacktrace option for instances
rostedt Dec 4, 2020
867fbf2
lib/syscall: fix syscall registers retrieval on 32-bit platforms
wtarreau Nov 30, 2020
c358e7e
can: af_can: can_rx_unregister(): remove WARN() statement from list o…
hartkopp Nov 26, 2020
cd928d3
gfs2: check for empty rgrp tree in gfs2_ri_update
AstralBob Nov 24, 2020
6410c7f
netfilter: ipset: prevent uninit-value in hash_ip6_add
edumazet Nov 19, 2020
fdc1416
tipc: fix a deadlock when flushing scheduled work
Sep 7, 2020
af699e9
ASoC: wm_adsp: fix error return code in wm_adsp_load()
Nov 23, 2020
1015eef
rtw88: debug: Fix uninitialized memory in debugfs code
Dec 3, 2020
8e2c503
i2c: qup: Fix error return code in qup_i2c_bam_schedule_desc()
Nov 16, 2020
b9df537
dm writecache: remove BUG() and fail gracefully instead
snitm Nov 13, 2020
f25fa58
Input: i8042 - fix error return code in i8042_setup_aux()
Nov 25, 2020
1399541
netfilter: nf_tables: avoid false-postive lockdep splat
Nov 19, 2020
423e1b0
netfilter: nftables_offload: set address type in control dissector
ummakynes Nov 25, 2020
ed58971
x86/insn-eval: Use new for_each_insn_prefix() macro to loop over pref…
mhiramat Dec 3, 2020
66a08d1
Revert "geneve: pull IP header before ECN decapsulation"
kuba-moo Dec 9, 2020
2bff021
Linux 5.4.83
gregkh Dec 11, 2020
1b7e835
Merge tag 'v5.4.83' into 5.4-2.1.x-imx
zandrey Dec 11, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 4
SUBLEVEL = 82
SUBLEVEL = 83
EXTRAVERSION =
NAME = Kleptomaniac Octopus

Expand Down
9 changes: 7 additions & 2 deletions arch/powerpc/platforms/powernv/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,11 +186,16 @@ static void __init pnv_init(void)
add_preferred_console("hvc", 0, NULL);

if (!radix_enabled()) {
size_t size = sizeof(struct slb_entry) * mmu_slb_size;
int i;

/* Allocate per cpu area to save old slb contents during MCE */
for_each_possible_cpu(i)
paca_ptrs[i]->mce_faulty_slbs = memblock_alloc_node(mmu_slb_size, __alignof__(*paca_ptrs[i]->mce_faulty_slbs), cpu_to_node(i));
for_each_possible_cpu(i) {
paca_ptrs[i]->mce_faulty_slbs =
memblock_alloc_node(size,
__alignof__(struct slb_entry),
cpu_to_node(i));
}
}
}

Expand Down
3 changes: 2 additions & 1 deletion arch/powerpc/platforms/pseries/msi.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,8 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type)
return hwirq;
}

virq = irq_create_mapping(NULL, hwirq);
virq = irq_create_mapping_affinity(NULL, hwirq,
entry->affinity);

if (!virq) {
pr_debug("rtas_msi: Failed mapping hwirq %d\n", hwirq);
Expand Down
15 changes: 15 additions & 0 deletions arch/x86/include/asm/insn.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,21 @@ static inline int insn_offset_immediate(struct insn *insn)
return insn_offset_displacement(insn) + insn->displacement.nbytes;
}

/**
* for_each_insn_prefix() -- Iterate prefixes in the instruction
* @insn: Pointer to struct insn.
* @idx: Index storage.
* @prefix: Prefix byte.
*
* Iterate prefix bytes of given @insn. Each prefix byte is stored in @prefix
* and the index is stored in @idx (note that this @idx is just for a cursor,
* do not change it.)
* Since prefixes.nbytes can be bigger than 4 if some prefixes
* are repeated, it cannot be used for looping over the prefixes.
*/
#define for_each_insn_prefix(insn, idx, prefix) \
for (idx = 0; idx < ARRAY_SIZE(insn->prefixes.bytes) && (prefix = insn->prefixes.bytes[idx]) != 0; idx++)

#define POP_SS_OPCODE 0x1f
#define MOV_SREG_OPCODE 0x8e

Expand Down
10 changes: 6 additions & 4 deletions arch/x86/kernel/uprobes.c
Original file line number Diff line number Diff line change
Expand Up @@ -255,12 +255,13 @@ static volatile u32 good_2byte_insns[256 / 32] = {

static bool is_prefix_bad(struct insn *insn)
{
insn_byte_t p;
int i;

for (i = 0; i < insn->prefixes.nbytes; i++) {
for_each_insn_prefix(insn, i, p) {
insn_attr_t attr;

attr = inat_get_opcode_attribute(insn->prefixes.bytes[i]);
attr = inat_get_opcode_attribute(p);
switch (attr) {
case INAT_MAKE_PREFIX(INAT_PFX_ES):
case INAT_MAKE_PREFIX(INAT_PFX_CS):
Expand Down Expand Up @@ -715,6 +716,7 @@ static const struct uprobe_xol_ops push_xol_ops = {
static int branch_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn)
{
u8 opc1 = OPCODE1(insn);
insn_byte_t p;
int i;

switch (opc1) {
Expand Down Expand Up @@ -746,8 +748,8 @@ static int branch_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn)
* Intel and AMD behavior differ in 64-bit mode: Intel ignores 66 prefix.
* No one uses these insns, reject any branch insns with such prefix.
*/
for (i = 0; i < insn->prefixes.nbytes; i++) {
if (insn->prefixes.bytes[i] == 0x66)
for_each_insn_prefix(insn, i, p) {
if (p == 0x66)
return -ENOTSUPP;
}

Expand Down
5 changes: 3 additions & 2 deletions arch/x86/lib/insn-eval.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,15 @@ static int get_seg_reg_override_idx(struct insn *insn)
{
int idx = INAT_SEG_REG_DEFAULT;
int num_overrides = 0, i;
insn_byte_t p;

insn_get_prefixes(insn);

/* Look for any segment override prefixes. */
for (i = 0; i < insn->prefixes.nbytes; i++) {
for_each_insn_prefix(insn, i, p) {
insn_attr_t attr;

attr = inat_get_opcode_attribute(insn->prefixes.bytes[i]);
attr = inat_get_opcode_attribute(p);
switch (attr) {
case INAT_MAKE_PREFIX(INAT_PFX_CS):
idx = INAT_SEG_REG_CS;
Expand Down
14 changes: 13 additions & 1 deletion drivers/gpu/drm/i915/gt/intel_mocs.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,19 @@ static const struct drm_i915_mocs_entry skylake_mocs_table[] = {
GEN9_MOCS_ENTRIES,
MOCS_ENTRY(I915_MOCS_CACHED,
LE_3_WB | LE_TC_2_LLC_ELLC | LE_LRUM(3),
L3_3_WB)
L3_3_WB),

/*
* mocs:63
* - used by the L3 for all of its evictions.
* Thus it is expected to allow LLC cacheability to enable coherent
* flows to be maintained.
* - used to force L3 uncachable cycles.
* Thus it is expected to make the surface L3 uncacheable.
*/
MOCS_ENTRY(63,
LE_3_WB | LE_TC_1_LLC | LE_LRUM(3),
L3_1_UC)
};

/* NOTE: the LE_TGT_CACHE is not used on Broxton */
Expand Down
53 changes: 34 additions & 19 deletions drivers/i2c/busses/i2c-imx.c
Original file line number Diff line number Diff line change
Expand Up @@ -505,12 +505,17 @@ static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx)
dma->chan_using = NULL;
}

/* Clear arbitration lost bit */
static void i2c_imx_clr_al_bit(unsigned int status, struct imx_i2c_struct *i2c_imx)
static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, unsigned int bits)
{
status &= ~I2SR_IAL;
status |= (i2c_imx->hwdata->i2sr_clr_opcode & I2SR_IAL);
imx_i2c_write_reg(status, i2c_imx, IMX_I2C_I2SR);
unsigned int temp;

/*
* i2sr_clr_opcode is the value to clear all interrupts. Here we want to
* clear only <bits>, so we write ~i2sr_clr_opcode with just <bits>
* toggled. This is required because i.MX needs W0C and Vybrid uses W1C.
*/
temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits;
imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR);
}

static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy)
Expand All @@ -525,7 +530,7 @@ static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy)

/* check for arbitration lost */
if (temp & I2SR_IAL) {
i2c_imx_clr_al_bit(temp, i2c_imx);
i2c_imx_clear_irq(i2c_imx, I2SR_IAL);
return -EAGAIN;
}

Expand Down Expand Up @@ -556,6 +561,16 @@ static int i2c_imx_trx_complete(struct imx_i2c_struct *i2c_imx)
dev_dbg(&i2c_imx->adapter.dev, "<%s> Timeout\n", __func__);
return -ETIMEDOUT;
}

/* check for arbitration lost */
if (i2c_imx->i2csr & I2SR_IAL) {
dev_dbg(&i2c_imx->adapter.dev, "<%s> Arbitration lost\n", __func__);
i2c_imx_clear_irq(i2c_imx, I2SR_IAL);

i2c_imx->i2csr = 0;
return -EAGAIN;
}

dev_dbg(&i2c_imx->adapter.dev, "<%s> TRX complete\n", __func__);
i2c_imx->i2csr = 0;
return 0;
Expand Down Expand Up @@ -680,6 +695,8 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx)
/* Stop I2C transaction */
dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__);
temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
if (!(temp & I2CR_MSTA))
i2c_imx->stopped = 1;
temp &= ~(I2CR_MSTA | I2CR_MTX);
if (i2c_imx->dma)
temp &= ~I2CR_DMAEN;
Expand All @@ -701,14 +718,6 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx)
imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
}

/* Clear interrupt flag bit */
static void i2c_imx_clr_if_bit(unsigned int status, struct imx_i2c_struct *i2c_imx)
{
status &= ~I2SR_IIF;
status |= (i2c_imx->hwdata->i2sr_clr_opcode & I2SR_IIF);
imx_i2c_write_reg(status, i2c_imx, IMX_I2C_I2SR);
}

static irqreturn_t i2c_imx_master_isr(struct imx_i2c_struct *i2c_imx)
{
unsigned int status;
Expand Down Expand Up @@ -847,9 +856,12 @@ static int i2c_imx_dma_read(struct imx_i2c_struct *i2c_imx,
*/
dev_dbg(dev, "<%s> clear MSTA\n", __func__);
temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
if (!(temp & I2CR_MSTA))
i2c_imx->stopped = 1;
temp &= ~(I2CR_MSTA | I2CR_MTX);
imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
i2c_imx_bus_busy(i2c_imx, 0);
if (!i2c_imx->stopped)
i2c_imx_bus_busy(i2c_imx, 0);
} else {
/*
* For i2c master receiver repeat restart operation like:
Expand Down Expand Up @@ -972,9 +984,12 @@ static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs, bo
dev_dbg(&i2c_imx->adapter.dev,
"<%s> clear MSTA\n", __func__);
temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
if (!(temp & I2CR_MSTA))
i2c_imx->stopped = 1;
temp &= ~(I2CR_MSTA | I2CR_MTX);
imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
i2c_imx_bus_busy(i2c_imx, 0);
if (!i2c_imx->stopped)
i2c_imx_bus_busy(i2c_imx, 0);
} else {
/*
* For i2c master receiver repeat restart operation like:
Expand Down Expand Up @@ -1073,7 +1088,7 @@ static int i2c_imx_recovery_for_layerscape(struct imx_i2c_struct *i2c_imx)
*/
temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
if (temp & I2SR_IAL)
i2c_imx_clr_al_bit(temp, i2c_imx);
i2c_imx_clear_irq(i2c_imx, I2SR_IIF);

return 0;
}
Expand Down Expand Up @@ -1352,7 +1367,7 @@ static irqreturn_t i2c_imx_slave_isr(struct imx_i2c_struct *i2c_imx)
status = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
ctl = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
if (status & I2SR_IAL) { /* Arbitration lost */
i2c_imx_clr_al_bit(status, i2c_imx);
i2c_imx_clear_irq(i2c_imx, I2SR_IIF);
} else if (status & I2SR_IAAS) { /* Addressed as a slave */
if (status & I2SR_SRW) { /* Master wants to read from us*/
dev_dbg(&i2c_imx->adapter.dev, "read requested");
Expand Down Expand Up @@ -1458,7 +1473,7 @@ static irqreturn_t i2c_imx_isr(int irq, void *dev_id)
status = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);

if (status & I2SR_IIF) {
i2c_imx_clr_if_bit(status, i2c_imx);
i2c_imx_clear_irq(i2c_imx, I2SR_IIF);
#if IS_ENABLED(CONFIG_I2C_SLAVE)
if (i2c_imx->slave)
return i2c_imx_slave_isr(i2c_imx);
Expand Down
3 changes: 2 additions & 1 deletion drivers/i2c/busses/i2c-qup.c
Original file line number Diff line number Diff line change
Expand Up @@ -806,7 +806,8 @@ static int qup_i2c_bam_schedule_desc(struct qup_i2c_dev *qup)
if (ret || qup->bus_err || qup->qup_err) {
reinit_completion(&qup->xfer);

if (qup_i2c_change_state(qup, QUP_RUN_STATE)) {
ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
if (ret) {
dev_err(qup->dev, "change to run state timed out");
goto desc_err;
}
Expand Down
3 changes: 2 additions & 1 deletion drivers/input/serio/i8042.c
Original file line number Diff line number Diff line change
Expand Up @@ -1468,7 +1468,8 @@ static int __init i8042_setup_aux(void)
if (error)
goto err_free_ports;

if (aux_enable())
error = aux_enable();
if (error)
goto err_free_irq;

i8042_aux_irq_registered = true;
Expand Down
2 changes: 1 addition & 1 deletion drivers/iommu/amd_iommu_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@
#define DTE_IRQ_REMAP_INTCTL_MASK (0x3ULL << 60)
#define DTE_IRQ_TABLE_LEN_MASK (0xfULL << 1)
#define DTE_IRQ_REMAP_INTCTL (2ULL << 60)
#define DTE_IRQ_TABLE_LEN (8ULL << 1)
#define DTE_IRQ_TABLE_LEN (9ULL << 1)
#define DTE_IRQ_REMAP_ENABLE 1ULL

#define PAGE_MODE_NONE 0x00
Expand Down
4 changes: 2 additions & 2 deletions drivers/md/dm-writecache.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ static int persistent_memory_claim(struct dm_writecache *wc)
#else
static int persistent_memory_claim(struct dm_writecache *wc)
{
BUG();
return -EOPNOTSUPP;
}
#endif

Expand Down Expand Up @@ -1889,7 +1889,7 @@ static int writecache_ctr(struct dm_target *ti, unsigned argc, char **argv)
struct wc_memory_superblock s;

static struct dm_arg _args[] = {
{0, 10, "Invalid number of feature args"},
{0, 16, "Invalid number of feature args"},
};

as.argc = argc;
Expand Down
8 changes: 4 additions & 4 deletions drivers/md/dm.c
Original file line number Diff line number Diff line change
Expand Up @@ -455,8 +455,10 @@ static int dm_blk_report_zones(struct gendisk *disk, sector_t sector,
return -EAGAIN;

map = dm_get_live_table(md, &srcu_idx);
if (!map)
return -EIO;
if (!map) {
ret = -EIO;
goto out;
}

tgt = dm_table_find_target(map, sector);
if (!tgt) {
Expand Down Expand Up @@ -493,7 +495,6 @@ static int dm_blk_report_zones(struct gendisk *disk, sector_t sector,

static int dm_prepare_ioctl(struct mapped_device *md, int *srcu_idx,
struct block_device **bdev)
__acquires(md->io_barrier)
{
struct dm_target *tgt;
struct dm_table *map;
Expand Down Expand Up @@ -527,7 +528,6 @@ static int dm_prepare_ioctl(struct mapped_device *md, int *srcu_idx,
}

static void dm_unprepare_ioctl(struct mapped_device *md, int srcu_idx)
__releases(md->io_barrier)
{
dm_put_live_table(md, srcu_idx);
}
Expand Down
20 changes: 4 additions & 16 deletions drivers/net/geneve.c
Original file line number Diff line number Diff line change
Expand Up @@ -254,21 +254,11 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
skb_dst_set(skb, &tun_dst->dst);

/* Ignore packet loops (and multicast echo) */
if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr))
goto rx_error;

switch (skb_protocol(skb, true)) {
case htons(ETH_P_IP):
if (pskb_may_pull(skb, sizeof(struct iphdr)))
goto rx_error;
break;
case htons(ETH_P_IPV6):
if (pskb_may_pull(skb, sizeof(struct ipv6hdr)))
goto rx_error;
break;
default:
goto rx_error;
if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr)) {
geneve->dev->stats.rx_errors++;
goto drop;
}

oiph = skb_network_header(skb);
skb_reset_network_header(skb);

Expand Down Expand Up @@ -309,8 +299,6 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
u64_stats_update_end(&stats->syncp);
}
return;
rx_error:
geneve->dev->stats.rx_errors++;
drop:
/* Consume bad packet */
kfree_skb(skb);
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/wireless/realtek/rtw88/debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,8 @@ static int rtw_debugfs_copy_from_user(char tmp[], int size,
{
int tmp_len;

memset(tmp, 0, size);

if (count < num)
return -EFAULT;

Expand Down
Loading