2019-03-29 14:12:17 +08:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
2019-03-22 14:52:12 +08:00
|
|
|
From: "Wood, Brian J" <brian.j.wood@intel.com>
|
|
|
|
Date: Fri, 15 Mar 2019 11:37:47 -0700
|
2019-03-29 14:12:17 +08:00
|
|
|
Subject: [PATCH] media: pci: improper use of pointer before verified as valid
|
2019-03-22 14:52:12 +08:00
|
|
|
|
|
|
|
This fixes multiple uses of pointers before they've been
|
|
|
|
verified as having non-NULL value.
|
|
|
|
|
|
|
|
Tracked-On:PKT-1816
|
|
|
|
|
|
|
|
Change-Id: Ic9c4857d820e5a7362af97de290776df6f9335c2
|
|
|
|
Signed-off-by: Wood, Brian J <brian.j.wood@intel.com>
|
|
|
|
---
|
|
|
|
drivers/media/pci/intel/ipu-wrapper.c | 75 +++++++++++++++++----------
|
|
|
|
1 file changed, 47 insertions(+), 28 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/drivers/media/pci/intel/ipu-wrapper.c b/drivers/media/pci/intel/ipu-wrapper.c
|
2019-03-29 14:12:17 +08:00
|
|
|
index 047c1f2..f2a70cb 100644
|
2019-03-22 14:52:12 +08:00
|
|
|
--- a/drivers/media/pci/intel/ipu-wrapper.c
|
|
|
|
+++ b/drivers/media/pci/intel/ipu-wrapper.c
|
|
|
|
@@ -224,7 +224,8 @@ u64 shared_memory_alloc(unsigned int mmid, size_t bytes)
|
|
|
|
struct my_css_memory_buffer_item *buf;
|
|
|
|
unsigned long flags;
|
|
|
|
|
|
|
|
- dev_dbg(mine->dev, "%s: in, size: %zu\n", __func__, bytes);
|
|
|
|
+ if (mine)
|
|
|
|
+ dev_dbg(mine->dev, "%s: in, size: %zu\n", __func__, bytes);
|
|
|
|
|
|
|
|
if (!bytes)
|
|
|
|
return (unsigned long)&alloc_cookie;
|
|
|
|
@@ -267,6 +268,11 @@ void shared_memory_free(unsigned int mmid, u64 addr)
|
|
|
|
struct my_css_memory_buffer_item *buf = NULL;
|
|
|
|
unsigned long flags;
|
|
|
|
|
|
|
|
+ if (!mine) {
|
|
|
|
+ pr_err("Invalid mem subsystem, return. mmid=%d", mmid);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
if ((void *)(unsigned long)addr == &alloc_cookie)
|
|
|
|
return;
|
|
|
|
|
|
|
|
@@ -308,7 +314,7 @@ u32 shared_memory_map(unsigned int ssid, unsigned int mmid, u64 addr)
|
|
|
|
unsigned long flags;
|
|
|
|
|
|
|
|
if (!mine) {
|
|
|
|
- pr_err("Invalid mem subsystem, return NULL");
|
|
|
|
+ pr_err("Invalid mem subsystem, return NULL. mmid=%d", mmid);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -343,9 +349,10 @@ void shared_memory_unmap(unsigned int ssid, unsigned int mmid, u32 addr)
|
|
|
|
*/
|
|
|
|
void shared_memory_store_8(unsigned int mmid, u64 addr, u8 data)
|
|
|
|
{
|
|
|
|
- dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
- "access: %s: Enter addr = 0x%llx data = 0x%x\n",
|
|
|
|
- __func__, addr, data);
|
|
|
|
+ if (get_mem_sub_system(mmid))
|
|
|
|
+ dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
+ "access: %s: Enter addr = 0x%llx data = 0x%x\n",
|
|
|
|
+ __func__, addr, data);
|
|
|
|
|
|
|
|
*((u8 *)(unsigned long) addr) = data;
|
|
|
|
/*Invalidate the cache lines to flush the content to ddr. */
|
|
|
|
@@ -358,9 +365,10 @@ void shared_memory_store_8(unsigned int mmid, u64 addr, u8 data)
|
|
|
|
*/
|
|
|
|
void shared_memory_store_16(unsigned int mmid, u64 addr, u16 data)
|
|
|
|
{
|
|
|
|
- dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
- "access: %s: Enter addr = 0x%llx data = 0x%x\n",
|
|
|
|
- __func__, addr, data);
|
|
|
|
+ if (get_mem_sub_system(mmid))
|
|
|
|
+ dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
+ "access: %s: Enter addr = 0x%llx data = 0x%x\n",
|
|
|
|
+ __func__, addr, data);
|
|
|
|
|
|
|
|
*((u16 *)(unsigned long) addr) = data;
|
|
|
|
/*Invalidate the cache lines to flush the content to ddr. */
|
|
|
|
@@ -373,9 +381,10 @@ void shared_memory_store_16(unsigned int mmid, u64 addr, u16 data)
|
|
|
|
*/
|
|
|
|
void shared_memory_store_32(unsigned int mmid, u64 addr, u32 data)
|
|
|
|
{
|
|
|
|
- dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
- "access: %s: Enter addr = 0x%llx data = 0x%x\n",
|
|
|
|
- __func__, addr, data);
|
|
|
|
+ if (get_mem_sub_system(mmid))
|
|
|
|
+ dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
+ "access: %s: Enter addr = 0x%llx data = 0x%x\n",
|
|
|
|
+ __func__, addr, data);
|
|
|
|
|
|
|
|
*((u32 *)(unsigned long) addr) = data;
|
|
|
|
/* Invalidate the cache lines to flush the content to ddr. */
|
|
|
|
@@ -389,11 +398,12 @@ void shared_memory_store_32(unsigned int mmid, u64 addr, u32 data)
|
|
|
|
void shared_memory_store(unsigned int mmid, u64 addr, const void *data,
|
|
|
|
size_t bytes)
|
|
|
|
{
|
|
|
|
- dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
- "access: %s: Enter addr = 0x%lx bytes = 0x%zx\n", __func__,
|
|
|
|
- (unsigned long)addr, bytes);
|
|
|
|
+ if (get_mem_sub_system(mmid))
|
|
|
|
+ dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
+ "access: %s: Enter addr = 0x%lx bytes = 0x%zx\n", __func__,
|
|
|
|
+ (unsigned long)addr, bytes);
|
|
|
|
|
|
|
|
- if (!data) {
|
|
|
|
+ if (!data && get_mem_sub_system(mmid)) {
|
|
|
|
dev_err(get_mem_sub_system(mmid)->dev,
|
|
|
|
"%s: data ptr is null\n", __func__);
|
|
|
|
} else {
|
|
|
|
@@ -415,9 +425,10 @@ void shared_memory_store(unsigned int mmid, u64 addr, const void *data,
|
|
|
|
*/
|
|
|
|
void shared_memory_zero(unsigned int mmid, u64 addr, size_t bytes)
|
|
|
|
{
|
|
|
|
- dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
- "access: %s: Enter addr = 0x%llx data = 0x%zx\n",
|
|
|
|
- __func__, (unsigned long long)addr, bytes);
|
|
|
|
+ if (get_mem_sub_system(mmid))
|
|
|
|
+ dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
+ "access: %s: Enter addr = 0x%llx data = 0x%zx\n",
|
|
|
|
+ __func__, (unsigned long long)addr, bytes);
|
|
|
|
|
|
|
|
memset((void *)(unsigned long)addr, 0, bytes);
|
|
|
|
clflush_cache_range((void *)(unsigned long)addr, bytes);
|
|
|
|
@@ -431,8 +442,9 @@ u8 shared_memory_load_8(unsigned int mmid, u64 addr)
|
|
|
|
{
|
|
|
|
u8 data = 0;
|
|
|
|
|
|
|
|
- dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
- "access: %s: Enter addr = 0x%llx\n", __func__, addr);
|
|
|
|
+ if (get_mem_sub_system(mmid))
|
|
|
|
+ dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
+ "access: %s: Enter addr = 0x%llx\n", __func__, addr);
|
|
|
|
|
|
|
|
/* Invalidate the cache lines to flush the content to ddr. */
|
|
|
|
clflush_cache_range((void *)(unsigned long)addr, sizeof(u8));
|
|
|
|
@@ -448,8 +460,9 @@ u16 shared_memory_load_16(unsigned int mmid, u64 addr)
|
|
|
|
{
|
|
|
|
u16 data = 0;
|
|
|
|
|
|
|
|
- dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
- "access: %s: Enter addr = 0x%llx\n", __func__, addr);
|
|
|
|
+ if (get_mem_sub_system(mmid))
|
|
|
|
+ dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
+ "access: %s: Enter addr = 0x%llx\n", __func__, addr);
|
|
|
|
|
|
|
|
/* Invalidate the cache lines to flush the content to ddr. */
|
|
|
|
clflush_cache_range((void *)(unsigned long)addr, sizeof(u16));
|
|
|
|
@@ -465,8 +478,9 @@ u32 shared_memory_load_32(unsigned int mmid, u64 addr)
|
|
|
|
{
|
|
|
|
u32 data = 0;
|
|
|
|
|
|
|
|
- dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
- "access: %s: Enter addr = 0x%llx\n", __func__, addr);
|
|
|
|
+ if (get_mem_sub_system(mmid))
|
|
|
|
+ dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
+ "access: %s: Enter addr = 0x%llx\n", __func__, addr);
|
|
|
|
|
|
|
|
/* Invalidate the cache lines to flush the content to ddr. */
|
|
|
|
clflush_cache_range((void *)(unsigned long)addr, sizeof(u32));
|
|
|
|
@@ -480,11 +494,12 @@ u32 shared_memory_load_32(unsigned int mmid, u64 addr)
|
|
|
|
*/
|
|
|
|
void shared_memory_load(unsigned int mmid, u64 addr, void *data, size_t bytes)
|
|
|
|
{
|
|
|
|
- dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
- "access: %s: Enter addr = 0x%lx bytes = 0x%zx\n", __func__,
|
|
|
|
- (unsigned long)addr, bytes);
|
|
|
|
+ if (get_mem_sub_system(mmid))
|
|
|
|
+ dev_dbg(get_mem_sub_system(mmid)->dev,
|
|
|
|
+ "access: %s: Enter addr = 0x%lx bytes = 0x%zx\n", __func__,
|
|
|
|
+ (unsigned long)addr, bytes);
|
|
|
|
|
|
|
|
- if (!data) {
|
|
|
|
+ if (!data && get_mem_sub_system(mmid)) {
|
|
|
|
dev_err(get_mem_sub_system(mmid)->dev,
|
|
|
|
"%s: data ptr is null\n", __func__);
|
|
|
|
|
|
|
|
@@ -514,6 +529,10 @@ void ipu_wrapper_init(int mmid, struct device *dev, void __iomem *base)
|
|
|
|
{
|
|
|
|
struct wrapper_base *sys = get_mem_sub_system(mmid);
|
|
|
|
|
|
|
|
+ if (!sys) {
|
|
|
|
+ pr_err("Invalid mem subsystem, return. mmid=%d", mmid);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
init_wrapper(sys);
|
|
|
|
sys->dev = dev;
|
|
|
|
sys->sys_base = base;
|
|
|
|
--
|
2019-04-08 18:08:36 +08:00
|
|
|
https://clearlinux.org
|
2019-03-22 14:52:12 +08:00
|
|
|
|