mirror of
https://github.com/OpenAMP/open-amp.git
synced 2026-10-02 18:23:21 +08:00
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:
committed by
Arnaud Pouliquen
parent
a1c64fbc77
commit
2016ff1e49
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+74
-37
File diff suppressed because it is too large
Load Diff
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user