Additional input parameter checks for APIs

Added additional input parameter checks to APIs
Signed-off-by: Tammy Leino <tammy_leino@mentor.com>
This commit is contained in:
Tammy Leino
2022-10-03 17:30:14 +02:00
committed by Arnaud Pouliquen
parent a1c64fbc77
commit 2016ff1e49
8 changed files with 122 additions and 57 deletions
+1 -1
View File
@@ -535,7 +535,7 @@ remoteproc_init_mem(struct remoteproc_mem *mem, const char *name,
metal_phys_addr_t pa, metal_phys_addr_t da,
size_t size, struct metal_io_region *io)
{
if (!mem)
if (!mem || !io || size == 0)
return;
if (name)
strncpy(mem->name, name, sizeof(mem->name));
+18
View File
@@ -161,6 +161,9 @@ int rpmsg_send_offchannel_raw(struct rpmsg_endpoint *ept, uint32_t src,
static inline int rpmsg_send(struct rpmsg_endpoint *ept, const void *data,
int len)
{
if (!ept)
return RPMSG_ERR_PARAM;
return rpmsg_send_offchannel_raw(ept, ept->addr, ept->dest_addr, data,
len, true);
}
@@ -184,6 +187,9 @@ static inline int rpmsg_send(struct rpmsg_endpoint *ept, const void *data,
static inline int rpmsg_sendto(struct rpmsg_endpoint *ept, const void *data,
int len, uint32_t dst)
{
if (!ept)
return RPMSG_ERR_PARAM;
return rpmsg_send_offchannel_raw(ept, ept->addr, dst, data, len, true);
}
@@ -229,6 +235,9 @@ static inline int rpmsg_send_offchannel(struct rpmsg_endpoint *ept,
static inline int rpmsg_trysend(struct rpmsg_endpoint *ept, const void *data,
int len)
{
if (!ept)
return RPMSG_ERR_PARAM;
return rpmsg_send_offchannel_raw(ept, ept->addr, ept->dest_addr, data,
len, false);
}
@@ -252,6 +261,9 @@ static inline int rpmsg_trysend(struct rpmsg_endpoint *ept, const void *data,
static inline int rpmsg_trysendto(struct rpmsg_endpoint *ept, const void *data,
int len, uint32_t dst)
{
if (!ept)
return RPMSG_ERR_PARAM;
return rpmsg_send_offchannel_raw(ept, ept->addr, dst, data, len, false);
}
@@ -401,6 +413,9 @@ int rpmsg_send_offchannel_nocopy(struct rpmsg_endpoint *ept, uint32_t src,
static inline int rpmsg_sendto_nocopy(struct rpmsg_endpoint *ept,
const void *data, int len, uint32_t dst)
{
if (!ept)
return RPMSG_ERR_PARAM;
return rpmsg_send_offchannel_nocopy(ept, ept->addr, dst, data, len);
}
@@ -435,6 +450,9 @@ static inline int rpmsg_sendto_nocopy(struct rpmsg_endpoint *ept,
static inline int rpmsg_send_nocopy(struct rpmsg_endpoint *ept,
const void *data, int len)
{
if (!ept)
return RPMSG_ERR_PARAM;
return rpmsg_send_offchannel_nocopy(ept, ept->addr,
ept->dest_addr, data, len);
}
+3
View File
@@ -240,6 +240,9 @@ void rpmsg_virtio_init_shm_pool(struct rpmsg_virtio_shm_pool *shpool,
static inline struct rpmsg_device *
rpmsg_virtio_get_rpmsg_device(struct rpmsg_virtio_device *rvdev)
{
if (!rvdev)
return NULL;
return &rvdev->rdev;
}
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -285,7 +285,8 @@ void rproc_virtio_remove_vdev(struct virtio_device *vdev)
if (vq)
metal_free_memory(vq);
}
metal_free_memory(vdev->vrings_info);
if (vdev->vrings_info)
metal_free_memory(vdev->vrings_info);
metal_free_memory(rpvdev);
}
+3
View File
@@ -201,6 +201,9 @@ size_t find_rsc(void *rsc_table, unsigned int rsc_type, unsigned int index)
unsigned int lrsc_type;
metal_assert(r_table);
if (!r_table)
return 0;
/* Loop through the offset array and parse each resource entry */
rsc_index = 0;
for (i = 0; i < r_table->num; i++) {
+4 -6
View File
@@ -115,7 +115,7 @@ int rpmsg_send_offchannel_raw(struct rpmsg_endpoint *ept, uint32_t src,
{
struct rpmsg_device *rdev;
if (!ept || !ept->rdev || !data || dst == RPMSG_ADDR_ANY)
if (!ept || !ept->rdev || !data || dst == RPMSG_ADDR_ANY || len < 0)
return RPMSG_ERR_PARAM;
rdev = ept->rdev;
@@ -191,7 +191,7 @@ int rpmsg_send_offchannel_nocopy(struct rpmsg_endpoint *ept, uint32_t src,
{
struct rpmsg_device *rdev;
if (!ept || !ept->rdev || !data || dst == RPMSG_ADDR_ANY)
if (!ept || !ept->rdev || !data || dst == RPMSG_ADDR_ANY || len < 0)
return RPMSG_ERR_PARAM;
rdev = ept->rdev;
@@ -269,7 +269,7 @@ int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev,
int status = RPMSG_SUCCESS;
uint32_t addr = src;
if (!ept)
if (!ept || !rdev || !cb)
return RPMSG_ERR_PARAM;
metal_mutex_acquire(&rdev->lock);
@@ -328,12 +328,10 @@ void rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
{
struct rpmsg_device *rdev;
if (!ept)
if (!ept || !ept->rdev)
return;
rdev = ept->rdev;
if (!rdev)
return;
if (ept->name[0] && rdev->support_ns &&
ept->addr >= RPMSG_RESERVED_ADDRESSES)
+17 -12
View File
@@ -44,7 +44,7 @@ rpmsg_virtio_shm_pool_get_buffer(struct rpmsg_virtio_shm_pool *shpool,
{
void *buffer;
if (shpool->avail < size)
if (!shpool || size == 0 || shpool->avail < size)
return NULL;
buffer = (char *)shpool->base + shpool->size - shpool->avail;
shpool->avail -= size;
@@ -56,7 +56,7 @@ rpmsg_virtio_shm_pool_get_buffer(struct rpmsg_virtio_shm_pool *shpool,
void rpmsg_virtio_init_shm_pool(struct rpmsg_virtio_shm_pool *shpool,
void *shb, size_t size)
{
if (!shpool)
if (!shpool || !shb || size == 0)
return;
shpool->base = shb;
shpool->size = size;
@@ -644,6 +644,9 @@ int rpmsg_init_vdev_with_config(struct rpmsg_virtio_device *rvdev,
int status;
unsigned int i, role;
if (!rvdev || !vdev || !shm_io)
return RPMSG_ERR_PARAM;
rdev = &rvdev->rdev;
memset(rdev, 0, sizeof(*rdev));
metal_mutex_init(&rdev->lock);
@@ -797,15 +800,17 @@ void rpmsg_deinit_vdev(struct rpmsg_virtio_device *rvdev)
struct rpmsg_device *rdev;
struct rpmsg_endpoint *ept;
rdev = &rvdev->rdev;
while (!metal_list_is_empty(&rdev->endpoints)) {
node = rdev->endpoints.next;
ept = metal_container_of(node, struct rpmsg_endpoint, node);
rpmsg_destroy_ept(ept);
if (rvdev) {
rdev = &rvdev->rdev;
while (!metal_list_is_empty(&rdev->endpoints)) {
node = rdev->endpoints.next;
ept = metal_container_of(node, struct rpmsg_endpoint, node);
rpmsg_destroy_ept(ept);
}
rvdev->rvq = 0;
rvdev->svq = 0;
metal_mutex_deinit(&rdev->lock);
}
rvdev->rvq = 0;
rvdev->svq = 0;
metal_mutex_deinit(&rdev->lock);
}