Char/Misc driver fixes for 4.20-rc4
Here are some small char/misc driver fixes for issues that have been reported. Nothing major, highlights include: - gnss sync write fixes - uio oops fix - nvmem fixes - other minor fixes and some documentation/maintainers updates Full details are in the shortlog. All of these have been in linux-next for a while with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCW/ZqSw8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+yks8gCgm0Amv9/GLpE7qZqe/Az2S7t7pm4An2NHYfS1 /vrBi80OCiSLGakl/zs2 =MYVD -----END PGP SIGNATURE----- Merge tag 'char-misc-4.20-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc Pull char/misc driver fixes from Greg KH: "Here are some small char/misc driver fixes for issues that have been reported. Nothing major, highlights include: - gnss sync write fixes - uio oops fix - nvmem fixes - other minor fixes and some documentation/maintainers updates Full details are in the shortlog. All of these have been in linux-next for a while with no reported issues" * tag 'char-misc-4.20-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: Documentation/security-bugs: Postpone fix publication in exceptional cases MAINTAINERS: Add Sasha as a stable branch maintainer gnss: sirf: fix synchronous write timeout gnss: serial: fix synchronous write timeout uio: Fix an Oops on load test_firmware: fix error return getting clobbered nvmem: core: fix regression in of_nvmem_cell_get() misc: atmel-ssc: Fix section annotation on atmel_ssc_get_driver_data drivers/misc/sgi-gru: fix Spectre v1 vulnerability Drivers: hv: kvp: Fix the recent regression caused by incorrect clean-up slimbus: ngd: remove unnecessary check
This commit is contained in:
commit
52465bce85
|
@ -32,16 +32,17 @@ Disclosure and embargoed information
|
|||
The security list is not a disclosure channel. For that, see Coordination
|
||||
below.
|
||||
|
||||
Once a robust fix has been developed, our preference is to release the
|
||||
fix in a timely fashion, treating it no differently than any of the other
|
||||
thousands of changes and fixes the Linux kernel project releases every
|
||||
month.
|
||||
Once a robust fix has been developed, the release process starts. Fixes
|
||||
for publicly known bugs are released immediately.
|
||||
|
||||
However, at the request of the reporter, we will postpone releasing the
|
||||
fix for up to 5 business days after the date of the report or after the
|
||||
embargo has lifted; whichever comes first. The only exception to that
|
||||
rule is if the bug is publicly known, in which case the preference is to
|
||||
release the fix as soon as it's available.
|
||||
Although our preference is to release fixes for publicly undisclosed bugs
|
||||
as soon as they become available, this may be postponed at the request of
|
||||
the reporter or an affected party for up to 7 calendar days from the start
|
||||
of the release process, with an exceptional extension to 14 calendar days
|
||||
if it is agreed that the criticality of the bug requires more time. The
|
||||
only valid reason for deferring the publication of a fix is to accommodate
|
||||
the logistics of QA and large scale rollouts which require release
|
||||
coordination.
|
||||
|
||||
Whilst embargoed information may be shared with trusted individuals in
|
||||
order to develop a fix, such information will not be published alongside
|
||||
|
|
|
@ -14085,6 +14085,7 @@ F: Documentation/devicetree/bindings/iio/proximity/vl53l0x.txt
|
|||
|
||||
STABLE BRANCH
|
||||
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
M: Sasha Levin <sashal@kernel.org>
|
||||
L: stable@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/process/stable-kernel-rules.rst
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <linux/of.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/serdev.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
|
@ -63,7 +64,7 @@ static int gnss_serial_write_raw(struct gnss_device *gdev,
|
|||
int ret;
|
||||
|
||||
/* write is only buffered synchronously */
|
||||
ret = serdev_device_write(serdev, buf, count, 0);
|
||||
ret = serdev_device_write(serdev, buf, count, MAX_SCHEDULE_TIMEOUT);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include <linux/pm.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/serdev.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/wait.h>
|
||||
|
@ -83,7 +84,7 @@ static int sirf_write_raw(struct gnss_device *gdev, const unsigned char *buf,
|
|||
int ret;
|
||||
|
||||
/* write is only buffered synchronously */
|
||||
ret = serdev_device_write(serdev, buf, count, 0);
|
||||
ret = serdev_device_write(serdev, buf, count, MAX_SCHEDULE_TIMEOUT);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -353,6 +353,9 @@ static void process_ib_ipinfo(void *in_msg, void *out_msg, int op)
|
|||
|
||||
out->body.kvp_ip_val.dhcp_enabled = in->kvp_ip_val.dhcp_enabled;
|
||||
|
||||
/* fallthrough */
|
||||
|
||||
case KVP_OP_GET_IP_INFO:
|
||||
utf16s_to_utf8s((wchar_t *)in->kvp_ip_val.adapter_id,
|
||||
MAX_ADAPTER_ID_SIZE,
|
||||
UTF16_LITTLE_ENDIAN,
|
||||
|
@ -405,7 +408,11 @@ kvp_send_key(struct work_struct *dummy)
|
|||
process_ib_ipinfo(in_msg, message, KVP_OP_SET_IP_INFO);
|
||||
break;
|
||||
case KVP_OP_GET_IP_INFO:
|
||||
/* We only need to pass on message->kvp_hdr.operation. */
|
||||
/*
|
||||
* We only need to pass on the info of operation, adapter_id
|
||||
* and addr_family to the userland kvp daemon.
|
||||
*/
|
||||
process_ib_ipinfo(in_msg, message, KVP_OP_GET_IP_INFO);
|
||||
break;
|
||||
case KVP_OP_SET:
|
||||
switch (in_msg->body.kvp_set.data.value_type) {
|
||||
|
@ -446,9 +453,9 @@ kvp_send_key(struct work_struct *dummy)
|
|||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case KVP_OP_GET:
|
||||
/*
|
||||
* The key is always a string - utf16 encoding.
|
||||
*/
|
||||
message->body.kvp_set.data.key_size =
|
||||
utf16s_to_utf8s(
|
||||
(wchar_t *)in_msg->body.kvp_set.data.key,
|
||||
|
@ -456,6 +463,17 @@ kvp_send_key(struct work_struct *dummy)
|
|||
UTF16_LITTLE_ENDIAN,
|
||||
message->body.kvp_set.data.key,
|
||||
HV_KVP_EXCHANGE_MAX_KEY_SIZE - 1) + 1;
|
||||
|
||||
break;
|
||||
|
||||
case KVP_OP_GET:
|
||||
message->body.kvp_get.data.key_size =
|
||||
utf16s_to_utf8s(
|
||||
(wchar_t *)in_msg->body.kvp_get.data.key,
|
||||
in_msg->body.kvp_get.data.key_size,
|
||||
UTF16_LITTLE_ENDIAN,
|
||||
message->body.kvp_get.data.key,
|
||||
HV_KVP_EXCHANGE_MAX_KEY_SIZE - 1) + 1;
|
||||
break;
|
||||
|
||||
case KVP_OP_DELETE:
|
||||
|
|
|
@ -132,7 +132,7 @@ static const struct of_device_id atmel_ssc_dt_ids[] = {
|
|||
MODULE_DEVICE_TABLE(of, atmel_ssc_dt_ids);
|
||||
#endif
|
||||
|
||||
static inline const struct atmel_ssc_platform_data * __init
|
||||
static inline const struct atmel_ssc_platform_data *
|
||||
atmel_ssc_get_driver_data(struct platform_device *pdev)
|
||||
{
|
||||
if (pdev->dev.of_node) {
|
||||
|
|
|
@ -27,6 +27,9 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <asm/uv/uv_hub.h>
|
||||
|
||||
#include <linux/nospec.h>
|
||||
|
||||
#include "gru.h"
|
||||
#include "grutables.h"
|
||||
#include "gruhandles.h"
|
||||
|
@ -196,6 +199,7 @@ int gru_dump_chiplet_request(unsigned long arg)
|
|||
/* Currently, only dump by gid is implemented */
|
||||
if (req.gid >= gru_max_gids)
|
||||
return -EINVAL;
|
||||
req.gid = array_index_nospec(req.gid, gru_max_gids);
|
||||
|
||||
gru = GID_TO_GRU(req.gid);
|
||||
ubuf = req.buf;
|
||||
|
|
|
@ -44,6 +44,7 @@ struct nvmem_cell {
|
|||
int bytes;
|
||||
int bit_offset;
|
||||
int nbits;
|
||||
struct device_node *np;
|
||||
struct nvmem_device *nvmem;
|
||||
struct list_head node;
|
||||
};
|
||||
|
@ -298,6 +299,7 @@ static void nvmem_cell_drop(struct nvmem_cell *cell)
|
|||
mutex_lock(&nvmem_mutex);
|
||||
list_del(&cell->node);
|
||||
mutex_unlock(&nvmem_mutex);
|
||||
of_node_put(cell->np);
|
||||
kfree(cell->name);
|
||||
kfree(cell);
|
||||
}
|
||||
|
@ -530,6 +532,7 @@ static int nvmem_add_cells_from_of(struct nvmem_device *nvmem)
|
|||
return -ENOMEM;
|
||||
|
||||
cell->nvmem = nvmem;
|
||||
cell->np = of_node_get(child);
|
||||
cell->offset = be32_to_cpup(addr++);
|
||||
cell->bytes = be32_to_cpup(addr);
|
||||
cell->name = kasprintf(GFP_KERNEL, "%pOFn", child);
|
||||
|
@ -960,14 +963,13 @@ nvmem_cell_get_from_lookup(struct device *dev, const char *con_id)
|
|||
|
||||
#if IS_ENABLED(CONFIG_OF)
|
||||
static struct nvmem_cell *
|
||||
nvmem_find_cell_by_index(struct nvmem_device *nvmem, int index)
|
||||
nvmem_find_cell_by_node(struct nvmem_device *nvmem, struct device_node *np)
|
||||
{
|
||||
struct nvmem_cell *cell = NULL;
|
||||
int i = 0;
|
||||
|
||||
mutex_lock(&nvmem_mutex);
|
||||
list_for_each_entry(cell, &nvmem->cells, node) {
|
||||
if (index == i++)
|
||||
if (np == cell->np)
|
||||
break;
|
||||
}
|
||||
mutex_unlock(&nvmem_mutex);
|
||||
|
@ -1011,7 +1013,7 @@ struct nvmem_cell *of_nvmem_cell_get(struct device_node *np, const char *id)
|
|||
if (IS_ERR(nvmem))
|
||||
return ERR_CAST(nvmem);
|
||||
|
||||
cell = nvmem_find_cell_by_index(nvmem, index);
|
||||
cell = nvmem_find_cell_by_node(nvmem, cell_np);
|
||||
if (!cell) {
|
||||
__nvmem_device_put(nvmem);
|
||||
return ERR_PTR(-ENOENT);
|
||||
|
|
|
@ -777,9 +777,6 @@ static int qcom_slim_ngd_xfer_msg(struct slim_controller *sctrl,
|
|||
u8 la = txn->la;
|
||||
bool usr_msg = false;
|
||||
|
||||
if (txn->mc & SLIM_MSG_CLK_PAUSE_SEQ_FLG)
|
||||
return -EPROTONOSUPPORT;
|
||||
|
||||
if (txn->mt == SLIM_MSG_MT_CORE &&
|
||||
(txn->mc >= SLIM_MSG_MC_BEGIN_RECONFIGURATION &&
|
||||
txn->mc <= SLIM_MSG_MC_RECONFIGURE_NOW))
|
||||
|
|
|
@ -61,12 +61,6 @@
|
|||
#define SLIM_MSG_MC_NEXT_REMOVE_CHANNEL 0x58
|
||||
#define SLIM_MSG_MC_RECONFIGURE_NOW 0x5F
|
||||
|
||||
/*
|
||||
* Clock pause flag to indicate that the reconfig message
|
||||
* corresponds to clock pause sequence
|
||||
*/
|
||||
#define SLIM_MSG_CLK_PAUSE_SEQ_FLG (1U << 8)
|
||||
|
||||
/* Clock pause values per SLIMbus spec */
|
||||
#define SLIM_CLK_FAST 0
|
||||
#define SLIM_CLK_CONST_PHASE 1
|
||||
|
|
|
@ -961,6 +961,8 @@ int __uio_register_device(struct module *owner,
|
|||
if (ret)
|
||||
goto err_uio_dev_add_attributes;
|
||||
|
||||
info->uio_dev = idev;
|
||||
|
||||
if (info->irq && (info->irq != UIO_IRQ_CUSTOM)) {
|
||||
/*
|
||||
* Note that we deliberately don't use devm_request_irq
|
||||
|
@ -972,11 +974,12 @@ int __uio_register_device(struct module *owner,
|
|||
*/
|
||||
ret = request_irq(info->irq, uio_interrupt,
|
||||
info->irq_flags, info->name, idev);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
info->uio_dev = NULL;
|
||||
goto err_request_irq;
|
||||
}
|
||||
}
|
||||
|
||||
info->uio_dev = idev;
|
||||
return 0;
|
||||
|
||||
err_request_irq:
|
||||
|
|
|
@ -837,6 +837,7 @@ static ssize_t read_firmware_show(struct device *dev,
|
|||
if (req->fw->size > PAGE_SIZE) {
|
||||
pr_err("Testing interface must use PAGE_SIZE firmware for now\n");
|
||||
rc = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
memcpy(buf, req->fw->data, req->fw->size);
|
||||
|
||||
|
|
Loading…
Reference in New Issue