Merge branch 'android-msm-shamu-3.10-nyc-security-next' into android-msm-shamu-3.10-nyc
November 2016.1
diff --git a/arch/arm/configs/shamu_defconfig b/arch/arm/configs/shamu_defconfig
index 92fa34b..f72edf1 100644
--- a/arch/arm/configs/shamu_defconfig
+++ b/arch/arm/configs/shamu_defconfig
@@ -254,14 +254,9 @@
CONFIG_UID_CPUTIME=y
CONFIG_CYPRESS_CAPSENSE_PROGRAMMING=y
CONFIG_SCSI=y
-CONFIG_SCSI_TGT=y
CONFIG_BLK_DEV_SD=y
-CONFIG_CHR_DEV_SG=y
-CONFIG_CHR_DEV_SCH=y
CONFIG_SCSI_MULTI_LUN=y
-CONFIG_SCSI_CONSTANTS=y
-CONFIG_SCSI_LOGGING=y
-CONFIG_SCSI_SCAN_ASYNC=y
+# CONFIG_SCSI_LOWLEVEL is not set
CONFIG_MD=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_CRYPT=y
diff --git a/arch/arm/mach-msm/smp2p.c b/arch/arm/mach-msm/smp2p.c
index d6f479f..cd09f57 100644
--- a/arch/arm/mach-msm/smp2p.c
+++ b/arch/arm/mach-msm/smp2p.c
@@ -1,6 +1,6 @@
/* arch/arm/mach-msm/smp2p.c
*
- * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -507,8 +507,8 @@
struct smp2p_entry_v1 *pos;
if (!item || !name || !entry_ptr) {
- SMP2P_ERR("%s: invalid arguments %p, %p, %p\n",
- __func__, item, name, entry_ptr);
+ SMP2P_ERR("%s: invalid arguments %d, %d, %d\n",
+ __func__, !item, !name, !entry_ptr);
return;
}
diff --git a/arch/arm/mach-msm/smp2p_debug.c b/arch/arm/mach-msm/smp2p_debug.c
index 5269dcb..28c074e 100644
--- a/arch/arm/mach-msm/smp2p_debug.c
+++ b/arch/arm/mach-msm/smp2p_debug.c
@@ -1,6 +1,6 @@
/* arch/arm/mach-msm/smp2p_debug.c
*
- * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014,2016 The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -40,7 +40,7 @@
pid != SMP2P_REMOTE_MOCK_PROC)
continue;
- seq_printf(s, "| %5s (%d) | %11u | %10u | %10u | %p | %08x |\n",
+ seq_printf(s, "| %5s (%d) | %11u | %10u | %10u | %pK | %08x |\n",
int_cfg[pid].name,
pid, int_cfg[pid].in_int_id,
int_cfg[pid].in_interrupt_count,
diff --git a/arch/arm/mach-msm/smp2p_gpio.c b/arch/arm/mach-msm/smp2p_gpio.c
index db7f1bb..0512a54 100644
--- a/arch/arm/mach-msm/smp2p_gpio.c
+++ b/arch/arm/mach-msm/smp2p_gpio.c
@@ -338,7 +338,7 @@
chip = domain_ptr->host_data;
if (!chip) {
- SMP2P_ERR("%s: invalid domain ptr %p\n", __func__, domain_ptr);
+ SMP2P_ERR("%s: invalid domain ptr\n", __func__);
return -ENODEV;
}
diff --git a/arch/arm/mach-msm/smp2p_test.c b/arch/arm/mach-msm/smp2p_test.c
index 270abd5..6ae9b11 100644
--- a/arch/arm/mach-msm/smp2p_test.c
+++ b/arch/arm/mach-msm/smp2p_test.c
@@ -1,6 +1,6 @@
/* arch/arm/mach-msm/smp2p_test.c
*
- * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014,2016 The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
diff --git a/block/genhd.c b/block/genhd.c
index 6f612a7..50d8e7a 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -828,6 +828,7 @@
if (iter) {
class_dev_iter_exit(iter);
kfree(iter);
+ seqf->private = NULL;
}
}
diff --git a/drivers/crypto/msm/qcedev.c b/drivers/crypto/msm/qcedev.c
index ca0d023..94d6bad 100644
--- a/drivers/crypto/msm/qcedev.c
+++ b/drivers/crypto/msm/qcedev.c
@@ -1340,44 +1340,6 @@
struct qcedev_cipher_op_req *saved_req;
struct qcedev_cipher_op_req *creq = &areq->cipher_op_req;
- /* Verify Source Address's */
- for (i = 0; i < areq->cipher_op_req.entries; i++)
- if (!access_ok(VERIFY_READ,
- (void __user *)areq->cipher_op_req.vbuf.src[i].vaddr,
- areq->cipher_op_req.vbuf.src[i].len))
- return -EFAULT;
-
- /* Verify Destination Address's */
- if (creq->in_place_op != 1) {
- for (i = 0, total = 0; i < QCEDEV_MAX_BUFFERS; i++) {
- if ((areq->cipher_op_req.vbuf.dst[i].vaddr != 0) &&
- (total < creq->data_len)) {
- if (!access_ok(VERIFY_WRITE,
- (void __user *)creq->vbuf.dst[i].vaddr,
- creq->vbuf.dst[i].len)) {
- pr_err("%s:DST WR_VERIFY err %d=0x%x\n",
- __func__, i,
- (u32)creq->vbuf.dst[i].vaddr);
- return -EFAULT;
- }
- total += creq->vbuf.dst[i].len;
- }
- }
- } else {
- for (i = 0, total = 0; i < creq->entries; i++) {
- if (total < creq->data_len) {
- if (!access_ok(VERIFY_WRITE,
- (void __user *)creq->vbuf.src[i].vaddr,
- creq->vbuf.src[i].len)) {
- pr_err("%s:SRC WR_VERIFY err %d=0x%x\n",
- __func__, i,
- (u32)creq->vbuf.src[i].vaddr);
- return -EFAULT;
- }
- total += creq->vbuf.src[i].len;
- }
- }
- }
total = 0;
if (areq->cipher_op_req.mode == QCEDEV_AES_MODE_CTR)
@@ -1675,6 +1637,36 @@
__func__, total, req->data_len);
goto error;
}
+ /* Verify Source Address's */
+ for (i = 0, total = 0; i < req->entries; i++) {
+ if (total < req->data_len) {
+ if (!access_ok(VERIFY_READ,
+ (void __user *)req->vbuf.src[i].vaddr,
+ req->vbuf.src[i].len)) {
+ pr_err("%s:SRC RD_VERIFY err %d=0x%lx\n",
+ __func__, i, (uintptr_t)
+ req->vbuf.src[i].vaddr);
+ goto error;
+ }
+ total += req->vbuf.src[i].len;
+ }
+ }
+
+ /* Verify Destination Address's */
+ for (i = 0, total = 0; i < QCEDEV_MAX_BUFFERS; i++) {
+ if ((req->vbuf.dst[i].vaddr != 0) &&
+ (total < req->data_len)) {
+ if (!access_ok(VERIFY_WRITE,
+ (void __user *)req->vbuf.dst[i].vaddr,
+ req->vbuf.dst[i].len)) {
+ pr_err("%s:DST WR_VERIFY err %d=0x%lx\n",
+ __func__, i, (uintptr_t)
+ req->vbuf.dst[i].vaddr);
+ goto error;
+ }
+ total += req->vbuf.dst[i].len;
+ }
+ }
return 0;
error:
return -EINVAL;
diff --git a/drivers/crypto/msm/qcrypto.c b/drivers/crypto/msm/qcrypto.c
index 7cfe1f2..dc87816 100644
--- a/drivers/crypto/msm/qcrypto.c
+++ b/drivers/crypto/msm/qcrypto.c
@@ -1770,12 +1770,12 @@
* include assoicated data, ciphering data stream,
* generated MAC, and CCM padding.
*/
- if ((MAX_ALIGN_SIZE * 2 > ULONG_MAX - req->assoclen) ||
+ if ((MAX_ALIGN_SIZE * 2 > UINT_MAX - req->assoclen) ||
((MAX_ALIGN_SIZE * 2 + req->assoclen) >
- ULONG_MAX - qreq.ivsize) ||
+ UINT_MAX - qreq.ivsize) ||
((MAX_ALIGN_SIZE * 2 + req->assoclen
+ qreq.ivsize)
- > ULONG_MAX - req->cryptlen)) {
+ > UINT_MAX - req->cryptlen)) {
pr_err("Integer overflow on aead req length.\n");
return -EINVAL;
}
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index c4e5cdf..0644da1 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1138,6 +1138,7 @@
/* Ignore report if ErrorRollOver */
if (!(field->flags & HID_MAIN_ITEM_VARIABLE) &&
value[n] >= min && value[n] <= max &&
+ value[n] - min < field->maxusage &&
field->usage[value[n] - min].hid == HID_UP_KEYBOARD + 1)
goto exit;
}
@@ -1150,11 +1151,13 @@
}
if (field->value[n] >= min && field->value[n] <= max
+ && field->value[n] - min < field->maxusage
&& field->usage[field->value[n] - min].hid
&& search(value, field->value[n], count))
hid_process_event(hid, field, &field->usage[field->value[n] - min], 0, interrupt);
if (value[n] >= min && value[n] <= max
+ && value[n] - min < field->maxusage
&& field->usage[value[n] - min].hid
&& search(field->value, value[n], count))
hid_process_event(hid, field, &field->usage[value[n] - min], 1, interrupt);
diff --git a/drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_cci_i2c.c b/drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_cci_i2c.c
index 8951773..7c12b99 100644
--- a/drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_cci_i2c.c
+++ b/drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_cci_i2c.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -76,6 +76,12 @@
|| num_byte == 0)
return rc;
+ if (num_byte > I2C_REG_DATA_MAX) {
+ pr_err("%s: Error num_byte:0x%x exceeds 8K max supported:0x%x\n",
+ __func__, num_byte, I2C_REG_DATA_MAX);
+ return rc;
+ }
+
buf = kzalloc(num_byte, GFP_KERNEL);
if (!buf) {
pr_err("%s:%d no memory\n", __func__, __LINE__);
@@ -248,6 +254,12 @@
client_addr_type = client->addr_type;
client->addr_type = write_setting->addr_type;
+ if (reg_setting->reg_data_size > I2C_SEQ_REG_DATA_MAX) {
+ pr_err("%s: number of bytes %u exceeding the max supported %d\n",
+ __func__, reg_setting->reg_data_size, I2C_SEQ_REG_DATA_MAX);
+ return rc;
+ }
+
for (i = 0; i < write_setting->size; i++) {
rc = msm_camera_cci_i2c_write_seq(client, reg_setting->reg_addr,
reg_setting->reg_data, reg_setting->reg_data_size);
diff --git a/drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_qup_i2c.c b/drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_qup_i2c.c
index 3238538..96d2e79 100644
--- a/drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_qup_i2c.c
+++ b/drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_qup_i2c.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, 2013-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011, 2013-2014,2016 The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -77,7 +77,7 @@
enum msm_camera_i2c_data_type data_type)
{
int32_t rc = -EFAULT;
- unsigned char buf[client->addr_type+data_type];
+ unsigned char *buf = NULL;
if ((client->addr_type != MSM_CAMERA_I2C_BYTE_ADDR
&& client->addr_type != MSM_CAMERA_I2C_WORD_ADDR)
@@ -85,6 +85,17 @@
&& data_type != MSM_CAMERA_I2C_WORD_DATA))
return rc;
+ if (client->addr_type > UINT_MAX - data_type) {
+ pr_err("%s: integer overflow prevented\n", __func__);
+ return rc;
+ }
+
+ buf = kzalloc(client->addr_type+data_type, GFP_KERNEL);
+ if (!buf) {
+ pr_err("%s:%d no memory\n", __func__, __LINE__);
+ return -ENOMEM;
+ }
+
if (client->addr_type == MSM_CAMERA_I2C_BYTE_ADDR) {
buf[0] = addr;
} else if (client->addr_type == MSM_CAMERA_I2C_WORD_ADDR) {
@@ -94,6 +105,8 @@
rc = msm_camera_qup_i2c_rxdata(client, buf, data_type);
if (rc < 0) {
S_I2C_DBG("%s fail\n", __func__);
+ kfree(buf);
+ buf = NULL;
return rc;
}
@@ -103,6 +116,8 @@
*data = buf[0] << 8 | buf[1];
S_I2C_DBG("%s addr = 0x%x data: 0x%x\n", __func__, addr, *data);
+ kfree(buf);
+ buf = NULL;
return rc;
}
@@ -110,7 +125,7 @@
uint32_t addr, uint8_t *data, uint32_t num_byte)
{
int32_t rc = -EFAULT;
- unsigned char buf[client->addr_type+num_byte];
+ unsigned char *buf = NULL;
int i;
if ((client->addr_type != MSM_CAMERA_I2C_BYTE_ADDR
@@ -118,6 +133,22 @@
|| num_byte == 0)
return rc;
+ if (num_byte > I2C_REG_DATA_MAX) {
+ pr_err("%s: Error num_byte:0x%x exceeds 8K max supported:0x%x\n",
+ __func__, num_byte, I2C_REG_DATA_MAX);
+ return rc;
+ }
+ if (client->addr_type > UINT_MAX - num_byte) {
+ pr_err("%s: integer overflow prevented\n", __func__);
+ return rc;
+ }
+
+ buf = kzalloc(client->addr_type+num_byte, GFP_KERNEL);
+ if (!buf) {
+ pr_err("%s:%d no memory\n", __func__, __LINE__);
+ return -ENOMEM;
+ }
+
if (client->addr_type == MSM_CAMERA_I2C_BYTE_ADDR) {
buf[0] = addr;
} else if (client->addr_type == MSM_CAMERA_I2C_WORD_ADDR) {
@@ -127,6 +158,8 @@
rc = msm_camera_qup_i2c_rxdata(client, buf, num_byte);
if (rc < 0) {
S_I2C_DBG("%s fail\n", __func__);
+ kfree(buf);
+ buf = NULL;
return rc;
}
@@ -136,6 +169,8 @@
S_I2C_DBG("Byte %d: 0x%x\n", i, buf[i]);
S_I2C_DBG("Data: 0x%x\n", data[i]);
}
+ kfree(buf);
+ buf = NULL;
return rc;
}
@@ -294,6 +329,12 @@
client_addr_type = client->addr_type;
client->addr_type = write_setting->addr_type;
+ if (reg_setting->reg_data_size > I2C_SEQ_REG_DATA_MAX) {
+ pr_err("%s: number of bytes %u exceeding the max supported %d\n",
+ __func__, reg_setting->reg_data_size, I2C_SEQ_REG_DATA_MAX);
+ return rc;
+ }
+
for (i = 0; i < write_setting->size; i++) {
rc = msm_camera_qup_i2c_write_seq(client, reg_setting->reg_addr,
reg_setting->reg_data, reg_setting->reg_data_size);
diff --git a/drivers/media/platform/msm/vidc/hfi_packetization.c b/drivers/media/platform/msm/vidc/hfi_packetization.c
index 12ae1d9..235b9aeb 100644
--- a/drivers/media/platform/msm/vidc/hfi_packetization.c
+++ b/drivers/media/platform/msm/vidc/hfi_packetization.c
@@ -1900,7 +1900,7 @@
struct hfi_cmd_sys_test_ssr_packet *pkt)
{
if (!pkt) {
- dprintk(VIDC_ERR, "Invalid params, device: %p\n", pkt);
+ dprintk(VIDC_ERR, "Invalid params, device: %pK\n", pkt);
return -EINVAL;
}
pkt->size = sizeof(struct hfi_cmd_sys_test_ssr_packet);
@@ -1913,7 +1913,7 @@
struct hfi_cmd_sys_get_property_packet *pkt)
{
if (!pkt) {
- dprintk(VIDC_ERR, "%s invalid param :%p\n", __func__, pkt);
+ dprintk(VIDC_ERR, "%s invalid param :%pK\n", __func__, pkt);
return -EINVAL;
}
pkt->size = sizeof(struct hfi_cmd_sys_get_property_packet);
diff --git a/drivers/media/platform/msm/vidc/hfi_response_handler.c b/drivers/media/platform/msm/vidc/hfi_response_handler.c
index 458832d..7b8d522 100644
--- a/drivers/media/platform/msm/vidc/hfi_response_handler.c
+++ b/drivers/media/platform/msm/vidc/hfi_response_handler.c
@@ -97,7 +97,7 @@
mutex_unlock(session_lock);
}
if (invalid)
- dprintk(VIDC_WARN, "Invalid session from FW: %p\n", sess);
+ dprintk(VIDC_WARN, "Invalid session from FW: %pK\n", sess);
return invalid;
}
@@ -703,7 +703,7 @@
dprintk(VIDC_DBG, "Entered %s\n", __func__);
if (!prop) {
dprintk(VIDC_ERR,
- "hal_process_sess_get_profile_level: bad_prop: %p\n",
+ "hal_process_sess_get_profile_level: bad_prop: %pK\n",
prop);
return;
}
@@ -734,7 +734,7 @@
if (!prop) {
dprintk(VIDC_ERR,
- "hal_process_sess_get_prop_buf_req: bad_prop: %p\n",
+ "hal_process_sess_get_prop_buf_req: bad_prop: %pK\n",
prop);
return;
}
@@ -923,7 +923,7 @@
sess_close = (struct hal_session *)pkt->session_id;
if (sess_close) {
dprintk(VIDC_WARN,
- "Sess init failed: 0x%x, 0x%p\n",
+ "Sess init failed: 0x%x, 0x%pK\n",
sess_close->session_id, sess_close);
}
}
@@ -1077,7 +1077,7 @@
data_done.output_done.extra_data_buffer =
pkt->extra_data_buffer;
data_done.output_done.buffer_type = HAL_BUFFER_OUTPUT;
- dprintk(VIDC_DBG, "FBD: Received buf: %p, of len: %d\n",
+ dprintk(VIDC_DBG, "FBD: Received buf: %pK, of len: %d\n",
pkt->packet_buffer, pkt->filled_len);
} else if (is_decoder == 1) {
struct hfi_msg_session_fbd_uncompressed_plane0_packet *pkt =
@@ -1310,7 +1310,7 @@
data_done.status = hfi_map_err_status((u32)pkt->error_type);
data_done.output_done.packet_buffer1 = pkt->sequence_header;
data_done.output_done.filled_len1 = pkt->header_len;
- dprintk(VIDC_INFO, "seq_hdr: %p, Length: %d\n",
+ dprintk(VIDC_INFO, "seq_hdr: %pK, Length: %d\n",
pkt->sequence_header, pkt->header_len);
callback(SESSION_GET_SEQ_HDR_DONE, &data_done);
}
diff --git a/drivers/media/platform/msm/vidc/msm_smem.c b/drivers/media/platform/msm/vidc/msm_smem.c
index b22bdde..f047723 100644
--- a/drivers/media/platform/msm/vidc/msm_smem.c
+++ b/drivers/media/platform/msm/vidc/msm_smem.c
@@ -56,7 +56,7 @@
struct ion_client *clnt = NULL;
if (!iova || !buffer_size || !hndl || !smem_client) {
- dprintk(VIDC_ERR, "Invalid params: %p, %p, %p, %p\n",
+ dprintk(VIDC_ERR, "Invalid params: %pK, %pK, %pK, %pK\n",
smem_client, hndl, iova, buffer_size);
return -EINVAL;
}
@@ -112,7 +112,7 @@
struct ion_client *clnt = NULL;
if (!hndl || !smem_client) {
- dprintk(VIDC_WARN, "Invalid params: %p, %p\n",
+ dprintk(VIDC_WARN, "Invalid params: %pK, %pK\n",
smem_client, hndl);
return;
}
@@ -146,7 +146,7 @@
hndl = ion_import_dma_buf(client->clnt, fd);
if (IS_ERR_OR_NULL(hndl)) {
- dprintk(VIDC_ERR, "Failed to get handle: %p, %d, %d, %p\n",
+ dprintk(VIDC_ERR, "Failed to get handle: %pK, %d, %d, %pK\n",
client, fd, offset, hndl);
rc = -ENOMEM;
goto fail_import_fd;
@@ -175,7 +175,7 @@
mem->device_addr = iova;
mem->size = buffer_size;
dprintk(VIDC_DBG,
- "%s: ion_handle = 0x%p, fd = %d, device_addr = 0x%x, size = %d, kvaddr = 0x%p, buffer_type = %d\n",
+ "%s: ion_handle = 0x%pK, fd = %d, device_addr = 0x%x, size = %d, kvaddr = 0x%pK, buffer_type = %d\n",
__func__, mem->smem_priv, fd, (u32)mem->device_addr,
mem->size, mem->kvaddr, mem->buffer_type);
return rc;
@@ -218,7 +218,7 @@
hndl = ion_alloc(client->clnt, size, align, heap_mask, flags);
if (IS_ERR_OR_NULL(hndl)) {
dprintk(VIDC_ERR,
- "Failed to allocate shared memory = %p, %d, %d, 0x%x\n",
+ "Failed to allocate shared memory = %pK, %d, %d, 0x%x\n",
client, size, align, flags);
rc = -ENOMEM;
goto fail_shared_mem_alloc;
@@ -248,7 +248,7 @@
mem->device_addr = iova;
mem->size = size;
dprintk(VIDC_DBG,
- "%s: ion_handle = 0x%p, device_addr = 0x%x, size = %d, kvaddr = 0x%p, buffer_type = %d\n",
+ "%s: ion_handle = 0x%pK, device_addr = 0x%x, size = %d, kvaddr = 0x%pK, buffer_type = %d\n",
__func__, mem->smem_priv, (u32)mem->device_addr,
mem->size, mem->kvaddr, mem->buffer_type);
return rc;
@@ -265,7 +265,7 @@
int domain, partition, rc;
dprintk(VIDC_DBG,
- "%s: ion_handle = 0x%p, device_addr = 0x%x, size = %d, kvaddr = 0x%p, buffer_type = %d\n",
+ "%s: ion_handle = 0x%pK, device_addr = 0x%x, size = %d, kvaddr = 0x%pK, buffer_type = %d\n",
__func__, mem->smem_priv, (u32)mem->device_addr,
mem->size, mem->kvaddr, mem->buffer_type);
rc = msm_smem_get_domain_partition((void *)client, mem->flags,
@@ -336,7 +336,7 @@
struct ion_handle *handle = NULL;
bool ret = false;
if (!clt || !priv) {
- dprintk(VIDC_ERR, "Invalid params: %p, %p\n",
+ dprintk(VIDC_ERR, "Invalid params: %pK, %pK\n",
clt, priv);
return false;
}
@@ -353,7 +353,7 @@
int rc = 0;
int msm_cache_ops = 0;
if (!mem || !client) {
- dprintk(VIDC_ERR, "Invalid params: %p, %p\n",
+ dprintk(VIDC_ERR, "Invalid params: %pK, %pK\n",
mem, client);
return -EINVAL;
}
@@ -400,7 +400,7 @@
struct smem_client *client = clt;
int rc = 0;
if (!client) {
- dprintk(VIDC_ERR, "Invalid params: %p\n",
+ dprintk(VIDC_ERR, "Invalid params: %pK\n",
client);
return -EINVAL;
}
diff --git a/drivers/media/platform/msm/vidc/msm_v4l2_vidc.c b/drivers/media/platform/msm/vidc/msm_v4l2_vidc.c
index 688bdb4..474f6de 100644
--- a/drivers/media/platform/msm/vidc/msm_v4l2_vidc.c
+++ b/drivers/media/platform/msm/vidc/msm_v4l2_vidc.c
@@ -286,7 +286,7 @@
struct platform_device *pdev)
{
if (!core || !pdev) {
- dprintk(VIDC_ERR, "%s: Invalid params %p %p\n",
+ dprintk(VIDC_ERR, "%s: Invalid params %pK %pK\n",
__func__, core, pdev);
return -EINVAL;
}
@@ -519,7 +519,7 @@
struct msm_vidc_core *core;
if (!pdev) {
- dprintk(VIDC_ERR, "%s invalid input %p", __func__, pdev);
+ dprintk(VIDC_ERR, "%s invalid input %pK", __func__, pdev);
return -EINVAL;
}
core = pdev->dev.platform_data;
diff --git a/drivers/media/platform/msm/vidc/msm_vdec.c b/drivers/media/platform/msm/vidc/msm_vdec.c
index 215ce49..df7a327 100644
--- a/drivers/media/platform/msm/vidc/msm_vdec.c
+++ b/drivers/media/platform/msm/vidc/msm_vdec.c
@@ -861,7 +861,7 @@
if (inst->state == MSM_VIDC_CORE_INVALID ||
core->state == VIDC_CORE_INVALID) {
dprintk(VIDC_ERR,
- "Core %p in bad state, ignoring release output buf\n",
+ "Core %pK in bad state, ignoring release output buf\n",
core);
goto exit;
}
@@ -954,7 +954,7 @@
int rc = 0;
if (!inst || !b) {
dprintk(VIDC_ERR,
- "Invalid input, inst = %p, buffer = %p\n", inst, b);
+ "Invalid input, inst = %pK, buffer = %pK\n", inst, b);
return -EINVAL;
}
q = msm_comm_get_vb2q(inst, b->type);
@@ -984,7 +984,7 @@
struct hal_buffer_requirements *buff_req_buffer;
if (!inst || !f || !inst->core || !inst->core->device) {
dprintk(VIDC_ERR,
- "Invalid input, inst = %p, format = %p\n", inst, f);
+ "Invalid input, inst = %pK, format = %pK\n", inst, f);
return -EINVAL;
}
hdev = inst->core->device;
@@ -1142,7 +1142,7 @@
fps = fps - 1;
if (inst->prop.fps != fps) {
- dprintk(VIDC_PROF, "reported fps changed for %p: %d->%d\n",
+ dprintk(VIDC_PROF, "reported fps changed for %pK: %d->%d\n",
inst, inst->prop.fps, fps);
inst->prop.fps = fps;
msm_comm_init_dcvs_load(inst);
@@ -1308,7 +1308,7 @@
{
if (!inst || !cap) {
dprintk(VIDC_ERR,
- "Invalid input, inst = %p, cap = %p\n", inst, cap);
+ "Invalid input, inst = %pK, cap = %pK\n", inst, cap);
return -EINVAL;
}
strlcpy(cap->driver, MSM_VIDC_DRV_NAME, sizeof(cap->driver));
@@ -1328,7 +1328,7 @@
int rc = 0;
if (!inst || !f) {
dprintk(VIDC_ERR,
- "Invalid input, inst = %p, f = %p\n", inst, f);
+ "Invalid input, inst = %pK, f = %pK\n", inst, f);
return -EINVAL;
}
if (f->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
@@ -1367,7 +1367,7 @@
enum hal_property property_id;
if (!q || !num_buffers || !num_planes
|| !sizes || !q->drv_priv) {
- dprintk(VIDC_ERR, "Invalid input, q = %p, %p, %p\n",
+ dprintk(VIDC_ERR, "Invalid input, q = %pK, %pK, %pK\n",
q, num_buffers, num_planes);
return -EINVAL;
}
@@ -1576,7 +1576,7 @@
rc = msm_comm_try_state(inst, MSM_VIDC_START_DONE);
if (rc) {
dprintk(VIDC_ERR,
- "Failed to move inst: %p to start done state\n", inst);
+ "Failed to move inst: %pK to start done state\n", inst);
goto fail_start;
}
msm_comm_init_dcvs_load(inst);
@@ -1615,7 +1615,7 @@
rc = msm_comm_try_state(inst, MSM_VIDC_RELEASE_RESOURCES_DONE);
if (rc)
dprintk(VIDC_ERR,
- "Failed to move inst: %p to start done state\n", inst);
+ "Failed to move inst: %pK to start done state\n", inst);
return rc;
}
@@ -1625,7 +1625,7 @@
int rc = 0;
struct hfi_device *hdev;
if (!q || !q->drv_priv) {
- dprintk(VIDC_ERR, "Invalid input, q = %p\n", q);
+ dprintk(VIDC_ERR, "Invalid input, q = %pK\n", q);
return -EINVAL;
}
inst = q->drv_priv;
@@ -1658,7 +1658,7 @@
struct msm_vidc_inst *inst;
int rc = 0;
if (!q || !q->drv_priv) {
- dprintk(VIDC_ERR, "Invalid input, q = %p\n", q);
+ dprintk(VIDC_ERR, "Invalid input, q = %pK\n", q);
return -EINVAL;
}
inst = q->drv_priv;
@@ -1683,7 +1683,7 @@
if (rc)
dprintk(VIDC_ERR,
- "Failed to move inst: %p, cap = %d to state: %d\n",
+ "Failed to move inst: %pK, cap = %d to state: %d\n",
inst, q->type, MSM_VIDC_RELEASE_RESOURCES_DONE);
return rc;
}
@@ -1740,7 +1740,7 @@
if (inst->state == MSM_VIDC_CORE_INVALID ||
core->state == VIDC_CORE_INVALID) {
dprintk(VIDC_ERR,
- "Core %p in bad state, Sending CLOSE event\n",
+ "Core %pK in bad state, Sending CLOSE event\n",
core);
msm_vidc_queue_v4l2_event(inst,
V4L2_EVENT_MSM_VIDC_CLOSE_DONE);
@@ -1782,7 +1782,7 @@
{
int rc = 0;
if (!inst) {
- dprintk(VIDC_ERR, "Invalid input = %p\n", inst);
+ dprintk(VIDC_ERR, "Invalid input = %pK\n", inst);
return -EINVAL;
}
inst->fmts[OUTPUT_PORT] = &vdec_formats[1];
@@ -2183,7 +2183,7 @@
rc = msm_comm_try_state(inst, MSM_VIDC_OPEN_DONE);
if (rc) {
dprintk(VIDC_ERR,
- "Failed to move inst: %p to start done state\n", inst);
+ "Failed to move inst: %pK to start done state\n", inst);
goto failed_open_done;
}
@@ -2215,7 +2215,7 @@
rc = msm_comm_try_state(inst, MSM_VIDC_OPEN_DONE);
if (rc) {
dprintk(VIDC_ERR,
- "Failed to move inst: %p to start done state\n", inst);
+ "Failed to move inst: %pK to start done state\n", inst);
goto failed_open_done;
}
for (c = 0; c < master->ncontrols; ++c) {
diff --git a/drivers/media/platform/msm/vidc/msm_venc.c b/drivers/media/platform/msm/vidc/msm_venc.c
index e668d13..2229f490 100644
--- a/drivers/media/platform/msm/vidc/msm_venc.c
+++ b/drivers/media/platform/msm/vidc/msm_venc.c
@@ -1379,7 +1379,7 @@
rc = msm_comm_try_state(inst, MSM_VIDC_START_DONE);
if (rc) {
dprintk(VIDC_ERR,
- "Failed to move inst: %p to start done state\n", inst);
+ "Failed to move inst: %pK to start done state\n", inst);
goto fail_start;
}
mutex_lock(&inst->sync_lock);
@@ -1407,7 +1407,7 @@
struct msm_vidc_inst *inst;
int rc = 0;
if (!q || !q->drv_priv) {
- dprintk(VIDC_ERR, "Invalid input, q = %p\n", q);
+ dprintk(VIDC_ERR, "Invalid input, q = %pK\n", q);
return -EINVAL;
}
inst = q->drv_priv;
@@ -1434,7 +1434,7 @@
struct msm_vidc_inst *inst;
int rc = 0;
if (!q || !q->drv_priv) {
- dprintk(VIDC_ERR, "Invalid input, q = %p\n", q);
+ dprintk(VIDC_ERR, "Invalid input, q = %pK\n", q);
return -EINVAL;
}
inst = q->drv_priv;
@@ -1455,7 +1455,7 @@
if (rc)
dprintk(VIDC_ERR,
- "Failed to move inst: %p, cap = %d to state: %d\n",
+ "Failed to move inst: %pK, cap = %d to state: %d\n",
inst, q->type, MSM_VIDC_CLOSE_DONE);
return rc;
}
@@ -2845,7 +2845,7 @@
if (rc) {
dprintk(VIDC_ERR,
- "Failed to move inst: %p to start done state\n", inst);
+ "Failed to move inst: %pK to start done state\n", inst);
goto failed_open_done;
}
@@ -2889,7 +2889,7 @@
{
int rc = 0;
if (!inst) {
- dprintk(VIDC_ERR, "Invalid input = %p\n", inst);
+ dprintk(VIDC_ERR, "Invalid input = %pK\n", inst);
return -EINVAL;
}
inst->fmts[CAPTURE_PORT] = &venc_formats[1];
@@ -2971,7 +2971,7 @@
{
if (!inst || !cap) {
dprintk(VIDC_ERR,
- "Invalid input, inst = %p, cap = %p\n", inst, cap);
+ "Invalid input, inst = %pK, cap = %pK\n", inst, cap);
return -EINVAL;
}
strlcpy(cap->driver, MSM_VIDC_DRV_NAME, sizeof(cap->driver));
@@ -2991,7 +2991,7 @@
int rc = 0;
if (!inst || !f) {
dprintk(VIDC_ERR,
- "Invalid input, inst = %p, f = %p\n", inst, f);
+ "Invalid input, inst = %pK, f = %pK\n", inst, f);
return -EINVAL;
}
if (f->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
@@ -3064,7 +3064,7 @@
fps = fps - 1;
if (inst->prop.fps != fps) {
- dprintk(VIDC_PROF, "reported fps changed for %p: %d->%d\n",
+ dprintk(VIDC_PROF, "reported fps changed for %pK: %d->%d\n",
inst, inst->prop.fps, fps);
inst->prop.fps = fps;
frame_rate.frame_rate = inst->prop.fps * (0x1<<16);
@@ -3118,7 +3118,7 @@
if (!inst || !f) {
dprintk(VIDC_ERR,
- "Invalid input, inst = %p, format = %p\n", inst, f);
+ "Invalid input, inst = %pK, format = %pK\n", inst, f);
return -EINVAL;
}
@@ -3329,7 +3329,7 @@
if (!inst || !f) {
dprintk(VIDC_ERR,
- "Invalid input, inst = %p, format = %p\n", inst, f);
+ "Invalid input, inst = %pK, format = %pK\n", inst, f);
return -EINVAL;
}
if (f->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
@@ -3384,7 +3384,7 @@
int rc = 0;
if (!inst || !b) {
dprintk(VIDC_ERR,
- "Invalid input, inst = %p, buffer = %p\n", inst, b);
+ "Invalid input, inst = %pK, buffer = %pK\n", inst, b);
return -EINVAL;
}
q = msm_comm_get_vb2q(inst, b->type);
@@ -3483,7 +3483,7 @@
rc = msm_comm_try_state(inst, MSM_VIDC_RELEASE_RESOURCES_DONE);
if (rc) {
dprintk(VIDC_ERR,
- "Failed to move inst: %p to release res done state\n",
+ "Failed to move inst: %pK to release res done state\n",
inst);
goto exit;
}
diff --git a/drivers/media/platform/msm/vidc/msm_vidc.c b/drivers/media/platform/msm/vidc/msm_vidc.c
index ffa7328..8f1d41b 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc.c
@@ -329,7 +329,7 @@
int i;
if (!list || !device_addr || !inst) {
dprintk(VIDC_ERR,
- "Invalid input- list: %p device_addr: %u inst: %p\n",
+ "Invalid input- list: %pK device_addr: %u inst: %pK\n",
list, device_addr, inst);
goto err_invalid_input;
}
@@ -486,7 +486,7 @@
goto exit;
}
- dprintk(VIDC_DBG, "[MAP] Create binfo = %p fd = %d type = %d\n",
+ dprintk(VIDC_DBG, "[MAP] Create binfo = %pK fd = %d type = %d\n",
binfo, b->m.planes[0].reserved[0], b->type);
for (i = 0; i < b->length; ++i) {
@@ -563,7 +563,7 @@
goto exit;
}
dprintk(VIDC_DBG,
- "%s: [MAP] binfo = %p, handle[%d] = %p, device_addr = 0x%x, fd = %d, offset = %d, mapped = %d\n",
+ "%s: [MAP] binfo = %pK, handle[%d] = %pK, device_addr = 0x%x, fd = %d, offset = %d, mapped = %d\n",
__func__, binfo, i, binfo->handle[i],
binfo->device_addr[i], binfo->fd[i],
binfo->buff_off[i], binfo->mapped[i]);
@@ -586,7 +586,7 @@
bool found = false, keep_node = false;
if (!inst || !binfo) {
- dprintk(VIDC_ERR, "%s invalid param: %p %p\n",
+ dprintk(VIDC_ERR, "%s invalid param: %pK %pK\n",
__func__, inst, binfo);
return -EINVAL;
}
@@ -615,7 +615,7 @@
for (i = 0; i < temp->num_planes; i++) {
dprintk(VIDC_DBG,
- "%s: [UNMAP] binfo = %p, handle[%d] = %p, device_addr = 0x%x, fd = %d, offset = %d, mapped = %d\n",
+ "%s: [UNMAP] binfo = %pK, handle[%d] = %pK, device_addr = 0x%x, fd = %d, offset = %d, mapped = %d\n",
__func__, temp, i, temp->handle[i],
temp->device_addr[i], temp->fd[i],
temp->buff_off[i], temp->mapped[i]);
@@ -644,12 +644,12 @@
}
}
if (!keep_node) {
- dprintk(VIDC_DBG, "[UNMAP] AND-FREED binfo: %p\n", temp);
+ dprintk(VIDC_DBG, "[UNMAP] AND-FREED binfo: %pK\n", temp);
list_del(&temp->list);
kfree(temp);
} else {
temp->inactive = true;
- dprintk(VIDC_DBG, "[UNMAP] NOT-FREED binfo: %p\n", temp);
+ dprintk(VIDC_DBG, "[UNMAP] NOT-FREED binfo: %pK\n", temp);
}
exit:
mutex_unlock(&inst->lock);
@@ -664,7 +664,7 @@
struct v4l2_plane plane[VIDEO_MAX_PLANES] = { {0} };
if (!binfo) {
- dprintk(VIDC_ERR, "%s invalid param: %p\n", __func__, binfo);
+ dprintk(VIDC_ERR, "%s invalid param: %pK\n", __func__, binfo);
return -EINVAL;
}
dprintk(VIDC_DBG, "%s fd[0] = %d\n", __func__, binfo->fd[0]);
@@ -687,7 +687,7 @@
int rc = 0;
if (!inst) {
- dprintk(VIDC_ERR, "%s: invalid inst: %p\n", __func__, inst);
+ dprintk(VIDC_ERR, "%s: invalid inst: %pK\n", __func__, inst);
return -EINVAL;
}
@@ -695,7 +695,7 @@
return 0;
if (!binfo) {
- dprintk(VIDC_ERR, "%s: invalid buffer info: %p\n",
+ dprintk(VIDC_ERR, "%s: invalid buffer info: %pK\n",
__func__, inst);
return -EINVAL;
}
@@ -777,7 +777,7 @@
rc = msm_comm_try_state(inst, MSM_VIDC_RELEASE_RESOURCES_DONE);
if (rc) {
dprintk(VIDC_ERR,
- "Failed to move inst: %p to release res done\n",
+ "Failed to move inst: %pK to release res done\n",
inst);
}
}
@@ -841,7 +841,7 @@
for (i = 0; i < bi->num_planes; i++) {
if (bi->handle[i] && bi->mapped[i]) {
dprintk(VIDC_DBG,
- "%s: [UNMAP] binfo = %p, handle[%d] = %p, device_addr = 0x%x, fd = %d, offset = %d, mapped = %d\n",
+ "%s: [UNMAP] binfo = %pK, handle[%d] = %pK, device_addr = 0x%x, fd = %d, offset = %d, mapped = %d\n",
__func__, bi, i, bi->handle[i],
bi->device_addr[i], bi->fd[i],
bi->buff_off[i], bi->mapped[i]);
@@ -1063,7 +1063,7 @@
struct msm_vidc_core_capability *capability = NULL;
if (!inst || !fsize) {
- dprintk(VIDC_ERR, "%s: invalid parameter: %p %p\n",
+ dprintk(VIDC_ERR, "%s: invalid parameter: %pK %pK\n",
__func__, inst, fsize);
return -EINVAL;
}
@@ -1130,7 +1130,7 @@
struct msm_vidc_inst *inst = instance;
if (!inst || !inst->mem_client) {
- dprintk(VIDC_ERR, "%s: invalid instance or client = %p %p\n",
+ dprintk(VIDC_ERR, "%s: invalid instance or client = %pK %pK\n",
__func__, inst, inst->mem_client);
return NULL;
}
@@ -1258,7 +1258,7 @@
goto err_invalid_core;
}
- pr_info(VIDC_DBG_TAG "Opening video instance: %p, %d\n",
+ pr_info(VIDC_DBG_TAG "Opening video instance: %pK, %d\n",
VIDC_MSG_PRIO2STRING(VIDC_INFO), inst, session_type);
mutex_init(&inst->sync_lock);
mutex_init(&inst->bufq[CAPTURE_PORT].lock);
@@ -1462,7 +1462,7 @@
dprintk(VIDC_ERR,
"Failed to move video instance to uninit state\n");
- pr_info(VIDC_DBG_TAG "Closed video instance: %p\n",
+ pr_info(VIDC_DBG_TAG "Closed video instance: %pK\n",
VIDC_MSG_PRIO2STRING(VIDC_INFO), inst);
kfree(inst);
return 0;
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_common.c b/drivers/media/platform/msm/vidc/msm_vidc_common.c
index dd9497e..647ada1 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_common.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc_common.c
@@ -136,7 +136,7 @@
int active_instances = 0;
struct msm_vidc_inst *inst = NULL;
if (!core) {
- dprintk(VIDC_ERR, "%s: Invalid args: %p\n", __func__, core);
+ dprintk(VIDC_ERR, "%s: Invalid args: %pK\n", __func__, core);
return -EINVAL;
}
@@ -194,7 +194,7 @@
int num_mbs_per_sec = 0;
if (!core) {
- dprintk(VIDC_ERR, "Invalid args: %p\n", core);
+ dprintk(VIDC_ERR, "Invalid args: %pK\n", core);
return -EINVAL;
}
@@ -291,13 +291,13 @@
struct vidc_bus_vote_data *vote_data = NULL;
if (!core) {
- dprintk(VIDC_ERR, "%s Invalid args: %p\n", __func__, core);
+ dprintk(VIDC_ERR, "%s Invalid args: %pK\n", __func__, core);
return -EINVAL;
}
hdev = core->device;
if (!hdev) {
- dprintk(VIDC_ERR, "%s Invalid device handle: %p\n",
+ dprintk(VIDC_ERR, "%s Invalid device handle: %pK\n",
__func__, hdev);
return -EINVAL;
}
@@ -392,7 +392,7 @@
{
int i, k = 0;
if (!fmt || index < 0) {
- dprintk(VIDC_ERR, "Invalid inputs, fmt = %p, index = %d\n",
+ dprintk(VIDC_ERR, "Invalid inputs, fmt = %pK, index = %d\n",
fmt, index);
return NULL;
}
@@ -414,7 +414,7 @@
{
int i;
if (!fmt) {
- dprintk(VIDC_ERR, "Invalid inputs, fmt = %p\n", fmt);
+ dprintk(VIDC_ERR, "Invalid inputs, fmt = %pK\n", fmt);
return NULL;
}
for (i = 0; i < size; i++) {
@@ -467,7 +467,7 @@
HAL_VIDEO_CODEC_MVC;
dprintk(VIDC_DBG, "supported_codecs: enc = 0x%x, dec = 0x%x\n",
core->enc_codec_supported, core->dec_codec_supported);
- dprintk(VIDC_DBG, "ptr[%d] = %p\n", index, &(core->completions[index]));
+ dprintk(VIDC_DBG, "ptr[%d] = %pK\n", index, &(core->completions[index]));
complete(&(core->completions[index]));
}
@@ -541,11 +541,11 @@
mutex_lock(&inst->lock);
if (inst->state == MSM_VIDC_CORE_INVALID) {
dprintk(VIDC_DBG,
- "Inst: %p is in bad state can't change state\n",
+ "Inst: %pK is in bad state can't change state\n",
inst);
goto exit;
}
- dprintk(VIDC_DBG, "Moved inst: %p from state: %d to state: %d\n",
+ dprintk(VIDC_DBG, "Moved inst: %pK from state: %d to state: %d\n",
inst, inst->state, state);
inst->state = state;
exit:
@@ -556,7 +556,7 @@
struct msm_vidc_inst *inst)
{
if (!inst) {
- dprintk(VIDC_ERR, "Invalid(%p) instance id\n", inst);
+ dprintk(VIDC_ERR, "Invalid(%pK) instance id\n", inst);
return -EINVAL;
}
complete(&inst->completions[SESSION_MSG_INDEX(cmd)]);
@@ -572,7 +572,7 @@
msecs_to_jiffies(msm_vidc_hw_rsp_timeout));
if (!rc) {
dprintk(VIDC_ERR,
- "%s: Wait interrupted or timeout[%p]: %d\n",
+ "%s: Wait interrupted or timeout[%pK]: %d\n",
__func__, inst->session, SESSION_MSG_INDEX(cmd));
msm_comm_kill_session(inst);
rc = -EIO;
@@ -589,7 +589,7 @@
{
int rc = 0;
if (IS_ALREADY_IN_STATE(flipped_state, desired_state)) {
- dprintk(VIDC_INFO, "inst: %p is already in state: %d\n",
+ dprintk(VIDC_INFO, "inst: %pK is already in state: %d\n",
inst, inst->state);
goto err_same_state;
}
@@ -709,7 +709,7 @@
u32 *ptr = NULL;
dprintk(VIDC_DBG,
- "%s - inst: %p buffer: %p extra: %p\n",
+ "%s - inst: %pK buffer: %pK extra: %pK\n",
__func__, inst,
event_notify->packet_buffer,
event_notify->exra_data_buffer);
@@ -956,33 +956,33 @@
if (!inst || !inst->session || !inst->core->device) {
dprintk(VIDC_ERR,
- "Session (%p) not in a stable enough state to handle session error\n",
+ "Session (%pK) not in a stable enough state to handle session error\n",
inst);
return;
}
hdev = inst->core->device;
- dprintk(VIDC_WARN, "Session error received for session %p\n", inst);
+ dprintk(VIDC_WARN, "Session error received for session %pK\n", inst);
change_inst_state(inst, MSM_VIDC_CORE_INVALID);
mutex_lock(&inst->lock);
- dprintk(VIDC_DBG, "cleaning up inst: %p\n", inst);
+ dprintk(VIDC_DBG, "cleaning up inst: %pK\n", inst);
rc = call_hfi_op(hdev, session_clean, inst->session);
if (rc)
- dprintk(VIDC_ERR, "Session (%p) clean failed: %d\n", inst, rc);
+ dprintk(VIDC_ERR, "Session (%pK) clean failed: %d\n", inst, rc);
inst->session = NULL;
mutex_unlock(&inst->lock);
if (response->status == VIDC_ERR_MAX_CLIENTS) {
dprintk(VIDC_WARN,
- "send max clients reached error to client: %p\n",
+ "send max clients reached error to client: %pK\n",
inst);
msm_vidc_queue_v4l2_event(inst,
V4L2_EVENT_MSM_VIDC_MAX_CLIENTS);
} else {
dprintk(VIDC_ERR,
- "send session error to client: %p\n",
+ "send session error to client: %pK\n",
inst);
msm_vidc_queue_v4l2_event(inst,
V4L2_EVENT_MSM_VIDC_SYS_ERROR);
@@ -1060,7 +1060,7 @@
return;
}
- dprintk(VIDC_WARN, "SYS_ERROR %d received for core %p\n", cmd, core);
+ dprintk(VIDC_WARN, "SYS_ERROR %d received for core %pK\n", cmd, core);
mutex_lock(&core->lock);
core->state = VIDC_CORE_INVALID;
@@ -1076,12 +1076,12 @@
hdev = inst->core->device;
if (hdev && inst->session) {
dprintk(VIDC_DBG,
- "cleaning up inst: 0x%p\n", inst);
+ "cleaning up inst: 0x%pK\n", inst);
rc = call_hfi_op(hdev, session_clean,
(void *) inst->session);
if (rc)
dprintk(VIDC_ERR,
- "Sess clean failed :%p\n",
+ "Sess clean failed :%pK\n",
inst);
}
inst->session = NULL;
@@ -1126,7 +1126,7 @@
hdev = inst->core->device;
mutex_lock(&inst->lock);
if (inst->session) {
- dprintk(VIDC_DBG, "cleaning up inst: 0x%p\n", inst);
+ dprintk(VIDC_DBG, "cleaning up inst: 0x%pK\n", inst);
call_hfi_op(hdev, session_clean,
(void *) inst->session);
}
@@ -1507,7 +1507,7 @@
if (extra_idx && (extra_idx < VIDEO_MAX_PLANES)) {
dprintk(VIDC_DBG,
- "extradata: userptr = %p;"
+ "extradata: userptr = %pK;"
" bytesused = %d; length = %d\n",
(u8 *)vb->v4l2_planes[extra_idx].m.userptr,
vb->v4l2_planes[extra_idx].bytesused,
@@ -1672,7 +1672,7 @@
dprintk(VIDC_DBG, "Init DCVS Load\n");
if (!inst || !inst->core) {
- dprintk(VIDC_ERR, "%s Invalid args: %p\n", __func__, inst);
+ dprintk(VIDC_ERR, "%s Invalid args: %pK\n", __func__, inst);
return;
}
@@ -1748,7 +1748,7 @@
dprintk(VIDC_DBG, "Init DCVS Struct\n");
if (!inst) {
- dprintk(VIDC_ERR, "%s Invalid args: %p\n", __func__, inst);
+ dprintk(VIDC_ERR, "%s Invalid args: %pK\n", __func__, inst);
return;
}
@@ -1765,7 +1765,7 @@
struct dcvs_stats *dcvs;
if (!inst) {
- dprintk(VIDC_ERR, "%s Invalid args: %p\n", __func__, inst);
+ dprintk(VIDC_ERR, "%s Invalid args: %pK\n", __func__, inst);
return;
}
@@ -1968,13 +1968,13 @@
struct hfi_device *hdev;
if (!core) {
- dprintk(VIDC_ERR, "%s Invalid args: %p\n", __func__, core);
+ dprintk(VIDC_ERR, "%s Invalid args: %pK\n", __func__, core);
return -EINVAL;
}
hdev = core->device;
if (!hdev) {
- dprintk(VIDC_ERR, "%s Invalid device handle: %p\n",
+ dprintk(VIDC_ERR, "%s Invalid device handle: %pK\n",
__func__, hdev);
return -EINVAL;
}
@@ -2212,7 +2212,7 @@
hdev = inst->core->device;
if (IS_ALREADY_IN_STATE(flipped_state, MSM_VIDC_OPEN)) {
- dprintk(VIDC_INFO, "inst: %p is already in state: %d\n",
+ dprintk(VIDC_INFO, "inst: %pK is already in state: %d\n",
inst, inst->state);
goto exit;
}
@@ -2314,7 +2314,7 @@
hdev = core->device;
if (IS_ALREADY_IN_STATE(flipped_state, MSM_VIDC_LOAD_RESOURCES)) {
- dprintk(VIDC_INFO, "inst: %p is already in state: %d\n",
+ dprintk(VIDC_INFO, "inst: %pK is already in state: %d\n",
inst, inst->state);
goto exit;
}
@@ -2370,7 +2370,7 @@
if (IS_ALREADY_IN_STATE(flipped_state, MSM_VIDC_START)) {
dprintk(VIDC_INFO,
- "inst: %p is already in state: %d\n",
+ "inst: %pK is already in state: %d\n",
inst, inst->state);
goto exit;
}
@@ -2400,7 +2400,7 @@
if (IS_ALREADY_IN_STATE(flipped_state, MSM_VIDC_STOP)) {
dprintk(VIDC_INFO,
- "inst: %p is already in state: %d\n",
+ "inst: %pK is already in state: %d\n",
inst, inst->state);
goto exit;
}
@@ -2430,7 +2430,7 @@
if (IS_ALREADY_IN_STATE(flipped_state, MSM_VIDC_RELEASE_RESOURCES)) {
dprintk(VIDC_INFO,
- "inst: %p is already in state: %d\n",
+ "inst: %pK is already in state: %d\n",
inst, inst->state);
goto exit;
}
@@ -2462,7 +2462,7 @@
hdev = inst->core->device;
if (IS_ALREADY_IN_STATE(flipped_state, MSM_VIDC_CLOSE)) {
dprintk(VIDC_INFO,
- "inst: %p is already in state: %d\n",
+ "inst: %pK is already in state: %d\n",
inst, inst->state);
goto exit;
}
@@ -2791,16 +2791,16 @@
struct msm_vidc_core *core;
if (!inst) {
dprintk(VIDC_ERR,
- "Invalid instance pointer = %p\n", inst);
+ "Invalid instance pointer = %pK\n", inst);
return -EINVAL;
}
dprintk(VIDC_DBG,
- "Trying to move inst: %p from: 0x%x to 0x%x\n",
+ "Trying to move inst: %pK from: 0x%x to 0x%x\n",
inst, inst->state, state);
core = inst->core;
if (!core) {
dprintk(VIDC_ERR,
- "Invalid core pointer = %p\n", inst);
+ "Invalid core pointer = %pK\n", inst);
return -EINVAL;
}
mutex_lock(&inst->sync_lock);
@@ -2910,18 +2910,18 @@
q = vb->vb2_queue;
inst = q->drv_priv;
if (!inst || !vb) {
- dprintk(VIDC_ERR, "Invalid input: %p, %p\n", inst, vb);
+ dprintk(VIDC_ERR, "Invalid input: %pK, %pK\n", inst, vb);
return -EINVAL;
}
core = inst->core;
if (!core) {
dprintk(VIDC_ERR,
- "Invalid input: %p, %p, %p\n", inst, core, vb);
+ "Invalid input: %pK, %pK, %pK\n", inst, core, vb);
return -EINVAL;
}
hdev = core->device;
if (!hdev) {
- dprintk(VIDC_ERR, "Invalid input: %p\n", hdev);
+ dprintk(VIDC_ERR, "Invalid input: %pK\n", hdev);
return -EINVAL;
}
@@ -3058,7 +3058,7 @@
(void *) inst->session, &seq_hdr);
if (!rc) {
inst->vb2_seq_hdr = vb;
- dprintk(VIDC_DBG, "Seq_hdr: %p\n",
+ dprintk(VIDC_DBG, "Seq_hdr: %pK\n",
inst->vb2_seq_hdr);
}
atomic_dec(&inst->get_seq_hdr_cnt);
@@ -3192,7 +3192,7 @@
msecs_to_jiffies(msm_vidc_hw_rsp_timeout));
if (!rc) {
dprintk(VIDC_ERR,
- "%s: Wait interrupted or timeout[%p]: %d\n",
+ "%s: Wait interrupted or timeout[%pK]: %d\n",
__func__, inst->session,
SESSION_MSG_INDEX(SESSION_PROPERTY_INFO));
inst->state = MSM_VIDC_CORE_INVALID;
@@ -3229,18 +3229,18 @@
struct hfi_device *hdev;
if (!inst) {
dprintk(VIDC_ERR,
- "Invalid instance pointer = %p\n", inst);
+ "Invalid instance pointer = %pK\n", inst);
return -EINVAL;
}
core = inst->core;
if (!core) {
dprintk(VIDC_ERR,
- "Invalid core pointer = %p\n", core);
+ "Invalid core pointer = %pK\n", core);
return -EINVAL;
}
hdev = core->device;
if (!hdev) {
- dprintk(VIDC_ERR, "Invalid device pointer = %p\n", hdev);
+ dprintk(VIDC_ERR, "Invalid device pointer = %pK\n", hdev);
return -EINVAL;
}
mutex_lock(&inst->lock);
@@ -3286,18 +3286,18 @@
struct hfi_device *hdev;
if (!inst) {
dprintk(VIDC_ERR,
- "Invalid instance pointer = %p\n", inst);
+ "Invalid instance pointer = %pK\n", inst);
return -EINVAL;
}
core = inst->core;
if (!core) {
dprintk(VIDC_ERR,
- "Invalid core pointer = %p\n", core);
+ "Invalid core pointer = %pK\n", core);
return -EINVAL;
}
hdev = core->device;
if (!hdev) {
- dprintk(VIDC_ERR, "Invalid device pointer = %p\n", hdev);
+ dprintk(VIDC_ERR, "Invalid device pointer = %pK\n", hdev);
return -EINVAL;
}
mutex_lock(&inst->lock);
@@ -3355,18 +3355,18 @@
struct hfi_device *hdev;
if (!inst) {
dprintk(VIDC_ERR,
- "Invalid instance pointer = %p\n", inst);
+ "Invalid instance pointer = %pK\n", inst);
return -EINVAL;
}
core = inst->core;
if (!core) {
dprintk(VIDC_ERR,
- "Invalid core pointer = %p\n", core);
+ "Invalid core pointer = %pK\n", core);
return -EINVAL;
}
hdev = core->device;
if (!hdev) {
- dprintk(VIDC_ERR, "Invalid device pointer = %p\n", hdev);
+ dprintk(VIDC_ERR, "Invalid device pointer = %pK\n", hdev);
return -EINVAL;
}
mutex_lock(&inst->lock);
@@ -3419,7 +3419,7 @@
int rc = 0;
struct hfi_device *hdev;
if (!inst) {
- dprintk(VIDC_ERR, "Invalid input: %p\n", inst);
+ dprintk(VIDC_ERR, "Invalid input: %pK\n", inst);
return -EINVAL;
}
@@ -3646,7 +3646,7 @@
if (binfo && binfo->type ==
V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
dprintk(VIDC_DBG,
- "%s: binfo = %p device_addr = 0x%pa\n",
+ "%s: binfo = %pK device_addr = 0x%pa\n",
__func__, binfo, &binfo->device_addr[0]);
buf_ref_put(inst, binfo);
}
@@ -3665,18 +3665,18 @@
struct hfi_device *hdev;
if (!inst) {
dprintk(VIDC_ERR,
- "Invalid instance pointer = %p\n", inst);
+ "Invalid instance pointer = %pK\n", inst);
return -EINVAL;
}
core = inst->core;
if (!core) {
dprintk(VIDC_ERR,
- "Invalid core pointer = %p\n", core);
+ "Invalid core pointer = %pK\n", core);
return -EINVAL;
}
hdev = core->device;
if (!hdev) {
- dprintk(VIDC_ERR, "Invalid device pointer = %p\n", hdev);
+ dprintk(VIDC_ERR, "Invalid device pointer = %pK\n", hdev);
return -EINVAL;
}
@@ -3693,7 +3693,7 @@
if (inst->state == MSM_VIDC_CORE_INVALID ||
core->state == VIDC_CORE_INVALID) {
dprintk(VIDC_ERR,
- "Core %p and inst %p are in bad state\n",
+ "Core %pK and inst %pK are in bad state\n",
core, inst);
msm_comm_flush_in_invalid_state(inst);
return 0;
@@ -3889,7 +3889,7 @@
int rc = 0;
struct hfi_device *hdev;
if (!core || !core->device) {
- dprintk(VIDC_WARN, "Invalid parameters: %p\n", core);
+ dprintk(VIDC_WARN, "Invalid parameters: %pK\n", core);
return -EINVAL;
}
hdev = core->device;
@@ -4173,7 +4173,7 @@
msecs_to_jiffies(msm_vidc_hw_rsp_timeout));
if (!rc) {
dprintk(VIDC_ERR,
- "%s: Wait interrupted or timed out [%p]: %d\n",
+ "%s: Wait interrupted or timed out [%pK]: %d\n",
__func__, inst, abort_completion);
msm_comm_generate_sys_error(inst);
} else {
@@ -4181,7 +4181,7 @@
}
} else {
dprintk(VIDC_WARN,
- "Inactive session %p, triggering an internal session error\n",
+ "Inactive session %pK, triggering an internal session error\n",
inst);
msm_comm_generate_session_error(inst);
@@ -4211,7 +4211,7 @@
enum hal_buffer buffer_type, int map_kernel)
{
if (!inst) {
- dprintk(VIDC_ERR, "%s: invalid inst: %p\n", __func__, inst);
+ dprintk(VIDC_ERR, "%s: invalid inst: %pK\n", __func__, inst);
return NULL;
}
if (power_on_for_smem(inst))
@@ -4225,7 +4225,7 @@
{
if (!inst || !mem) {
dprintk(VIDC_ERR,
- "%s: invalid params: %p %p\n", __func__, inst, mem);
+ "%s: invalid params: %pK %pK\n", __func__, inst, mem);
return;
}
if (power_on_for_smem(inst))
@@ -4239,7 +4239,7 @@
{
if (!inst || !mem) {
dprintk(VIDC_ERR,
- "%s: invalid params: %p %p\n", __func__, inst, mem);
+ "%s: invalid params: %pK %pK\n", __func__, inst, mem);
return -EINVAL;
}
return msm_smem_cache_operations(inst->mem_client, mem, cache_ops);
@@ -4249,7 +4249,7 @@
int fd, u32 offset, enum hal_buffer buffer_type)
{
if (!inst) {
- dprintk(VIDC_ERR, "%s: invalid inst: %p\n", __func__, inst);
+ dprintk(VIDC_ERR, "%s: invalid inst: %pK\n", __func__, inst);
return NULL;
}
if (power_on_for_smem(inst))
@@ -4264,7 +4264,7 @@
int *domain_num, int *partition_num)
{
if (!inst || !domain_num || !partition_num) {
- dprintk(VIDC_ERR, "%s: invalid params: %p %p %p\n",
+ dprintk(VIDC_ERR, "%s: invalid params: %pK %pK %pK\n",
__func__, inst, domain_num, partition_num);
return -EINVAL;
}
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_debug.c b/drivers/media/platform/msm/vidc/msm_vidc_debug.c
index 2f217a5..0511804 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_debug.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc_debug.c
@@ -66,13 +66,13 @@
struct hfi_device *hdev;
int i = 0;
if (!core || !core->device) {
- dprintk(VIDC_ERR, "Invalid params, core: %p\n", core);
+ dprintk(VIDC_ERR, "Invalid params, core: %pK\n", core);
return 0;
}
hdev = core->device;
INIT_DBG_BUF(dbg_buf);
write_str(&dbg_buf, "===============================\n");
- write_str(&dbg_buf, "CORE %d: 0x%p\n", core->id, core);
+ write_str(&dbg_buf, "CORE %d: 0x%pK\n", core->id, core);
write_str(&dbg_buf, "===============================\n");
write_str(&dbg_buf, "state: %d\n", core->state);
write_str(&dbg_buf, "base addr: 0x%x\n",
@@ -191,7 +191,7 @@
struct dentry *dir = NULL;
char debugfs_name[MAX_DEBUGFS_NAME];
if (!core) {
- dprintk(VIDC_ERR, "Invalid params, core: %p\n", core);
+ dprintk(VIDC_ERR, "Invalid params, core: %pK\n", core);
goto failed_create_dir;
}
@@ -257,15 +257,15 @@
struct msm_vidc_inst *inst = file->private_data;
int i, j;
if (!inst) {
- dprintk(VIDC_ERR, "Invalid params, core: %p\n", inst);
+ dprintk(VIDC_ERR, "Invalid params, core: %pK\n", inst);
return 0;
}
INIT_DBG_BUF(dbg_buf);
write_str(&dbg_buf, "===============================\n");
- write_str(&dbg_buf, "INSTANCE: 0x%p (%s)\n", inst,
+ write_str(&dbg_buf, "INSTANCE: 0x%pK (%s)\n", inst,
inst->session_type == MSM_VIDC_ENCODER ? "Encoder" : "Decoder");
write_str(&dbg_buf, "===============================\n");
- write_str(&dbg_buf, "core: 0x%p\n", inst->core);
+ write_str(&dbg_buf, "core: 0x%pK\n", inst->core);
write_str(&dbg_buf, "height: %d\n", inst->prop.height[CAPTURE_PORT]);
write_str(&dbg_buf, "width: %d\n", inst->prop.width[CAPTURE_PORT]);
write_str(&dbg_buf, "fps: %d\n", inst->prop.fps);
@@ -323,10 +323,10 @@
struct dentry *dir = NULL;
char debugfs_name[MAX_DEBUGFS_NAME];
if (!inst) {
- dprintk(VIDC_ERR, "Invalid params, inst: %p\n", inst);
+ dprintk(VIDC_ERR, "Invalid params, inst: %pK\n", inst);
goto failed_create_dir;
}
- snprintf(debugfs_name, MAX_DEBUGFS_NAME, "inst_%p", inst);
+ snprintf(debugfs_name, MAX_DEBUGFS_NAME, "inst_%pK", inst);
dir = debugfs_create_dir(debugfs_name, parent);
if (!dir) {
dprintk(VIDC_ERR, "Failed to create debugfs for msm_vidc\n");
diff --git a/drivers/media/platform/msm/vidc/q6_hfi.c b/drivers/media/platform/msm/vidc/q6_hfi.c
index 806f576..b83b9c5 100644
--- a/drivers/media/platform/msm/vidc/q6_hfi.c
+++ b/drivers/media/platform/msm/vidc/q6_hfi.c
@@ -202,7 +202,7 @@
struct iommu_info *iommu_map;
if (!device || !device->res) {
- dprintk(VIDC_ERR, "Invalid parameter: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid parameter: %pK\n", device);
return -EINVAL;
}
@@ -220,7 +220,7 @@
domain = iommu_group_get_iommudata(iommu_map->group);
if (IS_ERR_OR_NULL(domain)) {
dprintk(VIDC_ERR,
- "Failed to get domain data for group %p\n",
+ "Failed to get domain data for group %pK\n",
iommu_map->group);
rc = -EINVAL;
goto fail_group;
@@ -228,7 +228,7 @@
iommu_map->domain = msm_find_domain_no(domain);
if (iommu_map->domain < 0) {
dprintk(VIDC_ERR,
- "Failed to get domain index for domain %p\n",
+ "Failed to get domain index for domain %pK\n",
domain);
rc = -EINVAL;
goto fail_group;
@@ -254,7 +254,7 @@
int i = 0;
if (!device || !device->res) {
- dprintk(VIDC_ERR, "Invalid parameter: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid parameter: %pK\n", device);
return;
}
@@ -347,7 +347,7 @@
int rc = 0;
if (!callback) {
- dprintk(VIDC_ERR, "%s Invalid params: %p\n",
+ dprintk(VIDC_ERR, "%s Invalid params: %pK\n",
__func__, callback);
return NULL;
}
@@ -1211,7 +1211,7 @@
struct iommu_info *iommu_map;
if (!device || !device->res) {
- dprintk(VIDC_ERR, "Invalid parameter: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid parameter: %pK\n", device);
return -EINVAL;
}
@@ -1226,7 +1226,7 @@
rc = IS_ERR(domain) ? PTR_ERR(domain) : -EINVAL;
break;
}
- dprintk(VIDC_DBG, "Attaching domain(id:%d) %p to group %p\n",
+ dprintk(VIDC_DBG, "Attaching domain(id:%d) %pK to group %pK\n",
iommu_map->domain, domain, group);
rc = iommu_attach_group(domain, group);
if (rc) {
@@ -1257,7 +1257,7 @@
int i;
if (!device || !device->res) {
- dprintk(VIDC_ERR, "Invalid parameter: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid parameter: %pK\n", device);
return;
}
@@ -1386,7 +1386,7 @@
int rc = 0;
if (!hdev || !res || !callback) {
- dprintk(VIDC_ERR, "Invalid params: %p %p %p\n",
+ dprintk(VIDC_ERR, "Invalid params: %pK %pK %pK\n",
hdev, res, callback);
rc = -EINVAL;
goto err_hfi_init;
diff --git a/drivers/media/platform/msm/vidc/venus_hfi.c b/drivers/media/platform/msm/vidc/venus_hfi.c
index 184cbb4..f7f817d 100644
--- a/drivers/media/platform/msm/vidc/venus_hfi.c
+++ b/drivers/media/platform/msm/vidc/venus_hfi.c
@@ -265,7 +265,7 @@
venus_hfi_sim_modify_cmd_packet(packet);
if (msm_vidc_debug & VIDC_PKT) {
- dprintk(VIDC_PKT, "%s: %p\n", __func__, qinfo);
+ dprintk(VIDC_PKT, "%s: %pK\n", __func__, qinfo);
venus_hfi_dump_packet(packet);
}
@@ -448,7 +448,7 @@
*pb_tx_req_is_set = (1 == queue->qhdr_tx_req) ? 1 : 0;
venus_hfi_hal_sim_modify_msg_packet(packet);
if (msm_vidc_debug & VIDC_PKT) {
- dprintk(VIDC_PKT, "%s: %p\n", __func__, qinfo);
+ dprintk(VIDC_PKT, "%s: %pK\n", __func__, qinfo);
venus_hfi_dump_packet(packet);
}
return rc;
@@ -478,7 +478,7 @@
rc = -ENOMEM;
goto fail_smem_alloc;
}
- dprintk(VIDC_DBG, "venus_hfi_alloc: ptr = %p, size = %d\n",
+ dprintk(VIDC_DBG, "venus_hfi_alloc: ptr = %pK, size = %d\n",
alloc->kvaddr, size);
rc = msm_smem_cache_operations(dev->hal_client, alloc,
SMEM_CACHE_CLEAN);
@@ -498,7 +498,7 @@
static void venus_hfi_free(struct venus_hfi_device *dev, struct msm_smem *mem)
{
if (!dev || !mem) {
- dprintk(VIDC_ERR, "invalid param %p %p\n", dev, mem);
+ dprintk(VIDC_ERR, "invalid param %pK %pK\n", dev, mem);
return;
}
venus_hfi_power_enable(dev);
@@ -511,7 +511,7 @@
u32 hwiosymaddr = reg;
u8 *base_addr;
if (!device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return;
}
@@ -551,7 +551,7 @@
int rc ;
u8 *base_addr;
if (!device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return -EINVAL;
}
@@ -663,7 +663,7 @@
int i;
if (!device || !device->res) {
- dprintk(VIDC_ERR, "Invalid paramter: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid paramter: %pK\n", device);
return;
}
@@ -954,7 +954,7 @@
struct clock_info *cl;
if (!device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return -EINVAL;
}
if (device->clocks_enabled) {
@@ -1000,7 +1000,7 @@
struct clock_info *cl;
if (!device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return;
}
if (!device->clocks_enabled) {
@@ -1039,7 +1039,7 @@
u32 reg;
int rc = 0;
if (!device) {
- dprintk(VIDC_ERR, "Invalid input: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid input: %pK\n", device);
return -EINVAL;
}
if (venus_hfi_clk_gating_off(device)) {
@@ -1066,7 +1066,7 @@
{
int rc = 0;
if (!device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return -EINVAL;
}
if (!device->power_enabled) {
@@ -1106,7 +1106,7 @@
{
int rc = 0;
if (!device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return -EINVAL;
}
@@ -1194,7 +1194,7 @@
int rc = 0;
struct venus_hfi_device *device = dev;
if (!device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return -EINVAL;
}
mutex_lock(&device->clk_pwr_lock);
@@ -1212,7 +1212,7 @@
{
int rc = 0;
if (!device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return -EINVAL;
}
if (device->clocks_enabled) {
@@ -1250,7 +1250,7 @@
struct clock_info *cl;
if (!device) {
- dprintk(VIDC_ERR, "Invalid args: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid args: %pK\n", device);
return -EINVAL;
}
device->clk_load = load;
@@ -1877,7 +1877,7 @@
static inline void venus_hfi_clk_gating_on(struct venus_hfi_device *device)
{
if (!device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return;
}
if (!device->clocks_enabled) {
@@ -2221,7 +2221,7 @@
return -EINVAL;
}
sess_close = session;
- dprintk(VIDC_DBG, "deleted the session: 0x%p\n",
+ dprintk(VIDC_DBG, "deleted the session: 0x%pK\n",
sess_close);
mutex_lock(&((struct venus_hfi_device *)
sess_close->device)->session_lock);
@@ -2759,7 +2759,7 @@
dprintk(VIDC_INFO, "GOT INTERRUPT\n");
if (!device->callback) {
- dprintk(VIDC_ERR, "No interrupt callback function: %p\n",
+ dprintk(VIDC_ERR, "No interrupt callback function: %pK\n",
device);
return;
}
@@ -2843,7 +2843,7 @@
struct clock_info *cl = NULL;
if (!res || !device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return -EINVAL;
}
@@ -2909,7 +2909,7 @@
{
struct clock_info *cl;
if (!device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return;
}
@@ -2935,7 +2935,7 @@
struct clock_info *cl = NULL, *cl_fail = NULL;
int rc = 0;
if (!device) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", device);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", device);
return -EINVAL;
}
@@ -2992,7 +2992,7 @@
domain = iommu_group_get_iommudata(iommu_map->group);
if (!domain) {
dprintk(VIDC_ERR,
- "Failed to get domain data for group %p\n",
+ "Failed to get domain data for group %pK\n",
iommu_map->group);
rc = -EINVAL;
goto fail_group;
@@ -3000,7 +3000,7 @@
iommu_map->domain = msm_find_domain_no(domain);
if (iommu_map->domain < 0) {
dprintk(VIDC_ERR,
- "Failed to get domain index for domain %p\n",
+ "Failed to get domain index for domain %pK\n",
domain);
rc = -EINVAL;
goto fail_group;
@@ -3105,7 +3105,7 @@
struct venus_hfi_device *device = dev;
int rc = 0;
if (!device || !ocmem) {
- dprintk(VIDC_ERR, "Invalid params, core:%p, ocmem: %p\n",
+ dprintk(VIDC_ERR, "Invalid params, core:%pK, ocmem: %pK\n",
device, ocmem);
return -EINVAL;
}
@@ -3130,7 +3130,7 @@
int rc = 0;
if (!device) {
- dprintk(VIDC_ERR, "%s Invalid params, device:%p\n",
+ dprintk(VIDC_ERR, "%s Invalid params, device:%pK\n",
__func__, device);
rc = -EINVAL;
goto ocmem_unset_failed;
@@ -3202,7 +3202,7 @@
struct venus_hfi_device *device = dev;
if (!device || !size) {
- dprintk(VIDC_ERR, "%s Invalid param, core: %p, size: %lu\n",
+ dprintk(VIDC_ERR, "%s Invalid param, core: %pK, size: %lu\n",
__func__, device, size);
return -EINVAL;
}
@@ -3246,7 +3246,7 @@
int rc = 0;
if (!device) {
- dprintk(VIDC_ERR, "%s invalid device handle %p\n",
+ dprintk(VIDC_ERR, "%s invalid device handle %pK\n",
__func__, device);
return -EINVAL;
}
@@ -3316,7 +3316,7 @@
device->res = res;
if (!res) {
- dprintk(VIDC_ERR, "Invalid params: %p\n", res);
+ dprintk(VIDC_ERR, "Invalid params: %pK\n", res);
return -ENODEV;
}
@@ -3378,7 +3378,7 @@
struct venus_hfi_device *device = dev;
if (!device) {
- dprintk(VIDC_ERR, "%s: Invalid param device: %p\n",
+ dprintk(VIDC_ERR, "%s: Invalid param device: %pK\n",
__func__, device);
return -EINVAL;
}
@@ -3402,7 +3402,7 @@
iommu_group_set = &device->res->iommu_group_set;
if (!iommu_group_set) {
- dprintk(VIDC_ERR, "invalid params: %p\n", iommu_group_set);
+ dprintk(VIDC_ERR, "invalid params: %pK\n", iommu_group_set);
return -EINVAL;
}
@@ -3559,7 +3559,7 @@
struct venus_hfi_device *device = dev;
if (!device) {
- dprintk(VIDC_ERR, "%s Invalid paramter: %p\n",
+ dprintk(VIDC_ERR, "%s Invalid paramter: %pK\n",
__func__, device);
return -EINVAL;
}
@@ -3630,7 +3630,7 @@
{
struct venus_hfi_device *device = dev;
if (!device) {
- dprintk(VIDC_ERR, "%s Invalid paramter: %p\n",
+ dprintk(VIDC_ERR, "%s Invalid paramter: %pK\n",
__func__, device);
return;
}
@@ -3661,7 +3661,7 @@
int rc = 0;
if (!device) {
- dprintk(VIDC_ERR, "%s Invalid paramter: %p\n",
+ dprintk(VIDC_ERR, "%s Invalid paramter: %pK\n",
__func__, device);
return -EINVAL;
}
@@ -3708,7 +3708,7 @@
struct venus_hfi_device *device = dev;
if (!device) {
- dprintk(VIDC_ERR, "%s Invalid paramter: %p\n",
+ dprintk(VIDC_ERR, "%s Invalid paramter: %pK\n",
__func__, device);
return -EINVAL;
}
@@ -3872,7 +3872,7 @@
int rc = 0;
if (!res || !callback) {
- dprintk(VIDC_ERR, "Invalid params: %p %p\n", res, callback);
+ dprintk(VIDC_ERR, "Invalid params: %pK %pK\n", res, callback);
return NULL;
}
@@ -3969,7 +3969,7 @@
int rc = 0;
if (!hdev || !res || !callback) {
- dprintk(VIDC_ERR, "Invalid params: %p %p %p\n",
+ dprintk(VIDC_ERR, "Invalid params: %pK %pK %pK\n",
hdev, res, callback);
rc = -EINVAL;
goto err_venus_hfi_init;
diff --git a/drivers/media/platform/msm/vidc/vidc_hfi.c b/drivers/media/platform/msm/vidc/vidc_hfi.c
index ef0de37..a9e87a0 100644
--- a/drivers/media/platform/msm/vidc/vidc_hfi.c
+++ b/drivers/media/platform/msm/vidc/vidc_hfi.c
@@ -61,7 +61,7 @@
struct hfi_device *hdev)
{
if (!hdev) {
- dprintk(VIDC_ERR, "%s invalid device %p", __func__, hdev);
+ dprintk(VIDC_ERR, "%s invalid device %pK", __func__, hdev);
return;
}
diff --git a/drivers/misc/qcom/qdsp6v2/audio_utils.c b/drivers/misc/qcom/qdsp6v2/audio_utils.c
index f39cfb7..5a99932 100644
--- a/drivers/misc/qcom/qdsp6v2/audio_utils.c
+++ b/drivers/misc/qcom/qdsp6v2/audio_utils.c
@@ -23,11 +23,14 @@
#include <asm/ioctls.h>
#include "audio_utils.h"
-#define MIN_FRAME_SIZE 1536
-#define NUM_FRAMES 5
+/*
+ * Define maximum buffer size. Below values are chosen considering the higher
+ * values used among all native drivers.
+ */
+#define MAX_FRAME_SIZE 1536
+#define MAX_FRAMES 5
#define META_SIZE (sizeof(struct meta_out_dsp))
-#define FRAME_SIZE (1 + ((MIN_FRAME_SIZE + META_SIZE) * NUM_FRAMES))
-
+#define MAX_BUFFER_SIZE (1 + ((MAX_FRAME_SIZE + META_SIZE) * MAX_FRAMES))
static int audio_in_pause(struct q6audio_in *audio)
{
@@ -264,8 +267,7 @@
rc = -EINVAL;
break;
}
- if ((cfg.buffer_size > FRAME_SIZE) ||
- (cfg.buffer_count != FRAME_NUM)) {
+ if (cfg.buffer_size > MAX_BUFFER_SIZE) {
rc = -EINVAL;
break;
}
diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c
index 272be10..21fd727 100644
--- a/drivers/misc/qseecom.c
+++ b/drivers/misc/qseecom.c
@@ -1192,7 +1192,7 @@
void *req_buf = NULL;
if ((req_ptr == NULL) || (send_svc_ireq_ptr == NULL)) {
- pr_err("Error with pointer: req_ptr = %p, send_svc_ptr = %p\n",
+ pr_err("Error with pointer: req_ptr = %pK, send_svc_ptr = %pK\n",
req_ptr, send_svc_ireq_ptr);
return -EINVAL;
}
@@ -2374,7 +2374,7 @@
if (ret)
return ret;
- pr_debug("sending cmd_req->rsp size: %u, ptr: 0x%p\n",
+ pr_debug("sending cmd_req->rsp size: %u, ptr: 0x%pK\n",
req.resp_len, req.resp_buf);
return ret;
}
diff --git a/drivers/staging/android/ion/ion_heap.c b/drivers/staging/android/ion/ion_heap.c
index e176e2b..e9e604e 100644
--- a/drivers/staging/android/ion/ion_heap.c
+++ b/drivers/staging/android/ion/ion_heap.c
@@ -344,8 +344,9 @@
switch (heap_data->type) {
case ION_HEAP_TYPE_SYSTEM_CONTIG:
- heap = ion_system_contig_heap_create(heap_data);
- break;
+ pr_err("%s: Heap type is disabled: %d\n", __func__,
+ heap_data->type);
+ return ERR_PTR(-EINVAL);
case ION_HEAP_TYPE_SYSTEM:
heap = ion_system_heap_create(heap_data);
break;
@@ -381,7 +382,8 @@
switch (heap->type) {
case ION_HEAP_TYPE_SYSTEM_CONTIG:
- ion_system_contig_heap_destroy(heap);
+ pr_err("%s: Heap type is disabled: %d\n", __func__,
+ heap->type);
break;
case ION_HEAP_TYPE_SYSTEM:
ion_system_heap_destroy(heap);
diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
index b7b8048..420dd6e 100644
--- a/drivers/tty/tty_ldisc.c
+++ b/drivers/tty/tty_ldisc.c
@@ -415,6 +415,10 @@
* they are not on hot paths so a little discipline won't do
* any harm.
*
+ * The line discipline-related tty_struct fields are reset to
+ * prevent the ldisc driver from re-using stale information for
+ * the new ldisc instance.
+ *
* Locking: takes termios_mutex
*/
@@ -423,6 +427,9 @@
mutex_lock(&tty->termios_mutex);
tty->termios.c_line = num;
mutex_unlock(&tty->termios_mutex);
+
+ tty->disc_data = NULL;
+ tty->receive_room = 0;
}
/**
diff --git a/fs/ioprio.c b/fs/ioprio.c
index e50170c..46f0e24 100644
--- a/fs/ioprio.c
+++ b/fs/ioprio.c
@@ -149,8 +149,10 @@
if (ret)
goto out;
ret = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, IOPRIO_NORM);
+ task_lock(p);
if (p->io_context)
ret = p->io_context->ioprio;
+ task_unlock(p);
out:
return ret;
}
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 16712d5..d653273 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -844,7 +844,8 @@
int ret = 0;
struct mm_struct *mm = file->private_data;
- if (!mm)
+ /* Ensure the process spawned far enough to have an environment. */
+ if (!mm || !mm->env_end)
return 0;
page = (char *)__get_free_page(GFP_TEMPORARY);
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 3d0723d..44d0a02 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -29,6 +29,19 @@
#define ULLONG_MAX (~0ULL)
#define SIZE_MAX (~(size_t)0)
+#define U8_MAX ((u8)~0U)
+#define S8_MAX ((s8)(U8_MAX>>1))
+#define S8_MIN ((s8)(-S8_MAX - 1))
+#define U16_MAX ((u16)~0U)
+#define S16_MAX ((s16)(U16_MAX>>1))
+#define S16_MIN ((s16)(-S16_MAX - 1))
+#define U32_MAX ((u32)~0U)
+#define S32_MAX ((s32)(U32_MAX>>1))
+#define S32_MIN ((s32)(-S32_MAX - 1))
+#define U64_MAX ((u64)~0ULL)
+#define S64_MAX ((s64)(U64_MAX>>1))
+#define S64_MIN ((s64)(-S64_MAX - 1))
+
#define STACK_MAGIC 0xdeadbeef
#define REPEAT_BYTE(x) ((~0ul / 0xff) * (x))
diff --git a/include/media/msm_cam_sensor.h b/include/media/msm_cam_sensor.h
index b8b178f..288bad0 100644
--- a/include/media/msm_cam_sensor.h
+++ b/include/media/msm_cam_sensor.h
@@ -10,6 +10,7 @@
#define I2C_SEQ_REG_SETTING_MAX 5
#define I2C_SEQ_REG_DATA_MAX 256
+#define I2C_REG_DATA_MAX (8*1024)
#define MAX_CID 16
#define MSM_SENSOR_MCLK_8HZ 8000000
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 9e015ac..4b94a61f 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -1408,6 +1408,8 @@
{
if (sk->sk_send_head == skb_unlinked)
sk->sk_send_head = NULL;
+ if (tcp_sk(sk)->highest_sack == skb_unlinked)
+ tcp_sk(sk)->highest_sack = NULL;
}
static inline void tcp_init_send_head(struct sock *sk)
diff --git a/include/sound/q6asm-v2.h b/include/sound/q6asm-v2.h
index 6682336..f934556 100644
--- a/include/sound/q6asm-v2.h
+++ b/include/sound/q6asm-v2.h
@@ -198,7 +198,7 @@
int q6asm_audio_client_buf_alloc(unsigned int dir/* 1:Out,0:In */,
struct audio_client *ac,
unsigned int bufsz,
- unsigned int bufcnt);
+ uint32_t bufcnt);
int q6asm_audio_client_buf_alloc_contiguous(unsigned int dir
/* 1:Out,0:In */,
struct audio_client *ac,
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 267309e3..5e07e2d 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -5468,7 +5468,7 @@
struct css_set *cg = link->cg;
struct task_struct *task;
int count = 0;
- seq_printf(seq, "css_set %p\n", cg);
+ seq_printf(seq, "css_set %pK\n", cg);
list_for_each_entry(task, &cg->tasks, cg_list) {
if (count++ > MAX_TASKS_SHOWN_PER_CSS) {
seq_puts(seq, " ...\n");
diff --git a/kernel/events/core.c b/kernel/events/core.c
index f99f8c2..8178cfd 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -5408,7 +5408,6 @@
int err = 0;
mutex_lock(&swhash->hlist_mutex);
-
if (!swevent_hlist_deref(swhash) && cpu_online(cpu)) {
struct swevent_hlist *hlist;
@@ -7511,13 +7510,7 @@
static void perf_event_exit_cpu(int cpu)
{
- struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);
-
perf_event_exit_cpu_context(cpu);
-
- mutex_lock(&swhash->hlist_mutex);
- swevent_hlist_release(swhash);
- mutex_unlock(&swhash->hlist_mutex);
}
#else
static inline void perf_event_exit_cpu(int cpu) { }
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 1212685..f3cd662 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -1699,7 +1699,12 @@
goto out_unlock;
}
- if (unlikely(unix_peer(other) != sk && unix_recvq_full(other))) {
+ /* other == sk && unix_peer(other) != sk if
+ * - unix_peer(sk) == NULL, destination address bound to sk
+ * - unix_peer(sk) == sk by time of get but disconnected before lock
+ */
+ if (other != sk &&
+ unlikely(unix_peer(other) != sk && unix_recvq_full(other))) {
if (timeo) {
timeo = unix_wait_for_peer(other, timeo);
diff --git a/sound/soc/msm/qdsp6v2/msm-compr-q6-v2.c b/sound/soc/msm/qdsp6v2/msm-compr-q6-v2.c
index ea1d5cf..f80a1c6 100644
--- a/sound/soc/msm/qdsp6v2/msm-compr-q6-v2.c
+++ b/sound/soc/msm/qdsp6v2/msm-compr-q6-v2.c
@@ -1037,6 +1037,7 @@
struct snd_dec_ddp *ddp =
&compr->info.codec_param.codec.options.ddp;
uint32_t params_length = 0;
+ memset(params_value, 0, MAX_AC3_PARAM_SIZE);
/* check integer overflow */
if (ddp->params_length > UINT_MAX/sizeof(int)) {
pr_err("%s: Integer overflow ddp->params_length %d\n",
@@ -1081,6 +1082,7 @@
struct snd_dec_ddp *ddp =
&compr->info.codec_param.codec.options.ddp;
uint32_t params_length = 0;
+ memset(params_value, 0, MAX_AC3_PARAM_SIZE);
/* check integer overflow */
if (ddp->params_length > UINT_MAX/sizeof(int)) {
pr_err("%s: Integer overflow ddp->params_length %d\n",
diff --git a/sound/soc/msm/qdsp6v2/q6asm.c b/sound/soc/msm/qdsp6v2/q6asm.c
index 6fbedce..189fa72 100644
--- a/sound/soc/msm/qdsp6v2/q6asm.c
+++ b/sound/soc/msm/qdsp6v2/q6asm.c
@@ -44,7 +44,7 @@
#define TRUE 0x01
#define FALSE 0x00
-#define FRAME_NUM (8)
+
/* TODO, combine them together */
static DEFINE_MUTEX(session_lock);
struct asm_mmap {
@@ -919,7 +919,7 @@
int q6asm_audio_client_buf_alloc(unsigned int dir,
struct audio_client *ac,
unsigned int bufsz,
- unsigned int bufcnt)
+ uint32_t bufcnt)
{
int cnt = 0;
int rc = 0;
@@ -940,9 +940,12 @@
pr_debug("%s: buffer already allocated\n", __func__);
return 0;
}
- if (bufcnt != FRAME_NUM)
- goto fail;
mutex_lock(&ac->cmd_lock);
+ if (bufcnt > (U32_MAX/sizeof(struct audio_buffer))) {
+ pr_err("%s: Buffer size overflows", __func__);
+ mutex_unlock(&ac->cmd_lock);
+ goto fail;
+ }
buf = kzalloc(((sizeof(struct audio_buffer))*bufcnt),
GFP_KERNEL);
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index 3879eae..65f43a3 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -136,6 +136,7 @@
snd_printk(KERN_ERR "cannot memdup\n");
return -ENOMEM;
}
+ INIT_LIST_HEAD(&fp->list);
if (fp->nr_rates > MAX_NR_RATES) {
kfree(fp);
return -EINVAL;
@@ -153,16 +154,12 @@
stream = (fp->endpoint & USB_DIR_IN)
? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
err = snd_usb_add_audio_stream(chip, stream, fp);
- if (err < 0) {
- kfree(fp);
- kfree(rate_table);
- return err;
- }
+ if (err < 0)
+ goto error;
if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber ||
fp->altset_idx >= iface->num_altsetting) {
- kfree(fp);
- kfree(rate_table);
- return -EINVAL;
+ err = -EINVAL;
+ goto error;
}
alts = &iface->altsetting[fp->altset_idx];
if (fp->datainterval == 0)
@@ -173,6 +170,12 @@
snd_usb_init_pitch(chip, fp->iface, alts, fp);
snd_usb_init_sample_rate(chip, fp->iface, alts, fp, fp->rate_max);
return 0;
+
+ error:
+ list_del(&fp->list); /* unlink for avoiding double-free */
+ kfree(fp);
+ kfree(rate_table);
+ return err;
}
/*
@@ -239,6 +242,7 @@
fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
fp->datainterval = 0;
fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
+ INIT_LIST_HEAD(&fp->list);
switch (fp->maxpacksize) {
case 0x120:
@@ -262,6 +266,7 @@
? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
err = snd_usb_add_audio_stream(chip, stream, fp);
if (err < 0) {
+ list_del(&fp->list); /* unlink for avoiding double-free */
kfree(fp);
return err;
}
diff --git a/sound/usb/stream.c b/sound/usb/stream.c
index 7db2f89..97e678b 100644
--- a/sound/usb/stream.c
+++ b/sound/usb/stream.c
@@ -307,7 +307,9 @@
/*
* add this endpoint to the chip instance.
* if a stream with the same endpoint already exists, append to it.
- * if not, create a new pcm stream.
+ * if not, create a new pcm stream. note, fp is added to the substream
+ * fmt_list and will be freed on the chip instance release. do not free
+ * fp or do remove it from the substream fmt_list to avoid double-free.
*/
int snd_usb_add_audio_stream(struct snd_usb_audio *chip,
int stream,
@@ -643,6 +645,7 @@
fp->attributes = parse_uac_endpoint_attributes(chip, alts, protocol, iface_no);
fp->clock = clock;
fp->chmap = convert_chmap(num_channels, chconfig, protocol);
+ INIT_LIST_HEAD(&fp->list);
/* some quirks for attributes here */
@@ -687,6 +690,7 @@
snd_printdd(KERN_INFO "%d:%u:%d: add audio endpoint %#x\n", dev->devnum, iface_no, altno, fp->endpoint);
err = snd_usb_add_audio_stream(chip, stream, fp);
if (err < 0) {
+ list_del(&fp->list); /* unlink for avoiding double-free */
kfree(fp->rate_table);
kfree(fp->chmap);
kfree(fp);