diff options
| author | Skylar Chang <chiaweic@codeaurora.org> | 2017-01-24 10:11:33 -0800 |
|---|---|---|
| committer | Skylar Chang <chiaweic@codeaurora.org> | 2017-01-24 19:22:25 -0800 |
| commit | 170979c4fd7c824e7c40b0c0fc3c77b1d4ba1bb5 (patch) | |
| tree | 2b5af78a74695387d90dc9b879c9907a47d7d983 /drivers/platform/msm | |
| parent | 314869eb56763d34f91d5483b0d510267894fadd (diff) | |
msm: gsi: fix event ring handle in gsi_alloc_channel
Add a check to event ring handle.
Change-Id: If835e7e610745aeb82d4d0e363ef833d0f8d857a
CRs-Fixed: 1115476
Acked-by: Ady Abraham <adya@qti.qualcomm.com>
Signed-off-by: Skylar Chang <chiaweic@codeaurora.org>
Diffstat (limited to 'drivers/platform/msm')
| -rw-r--r-- | drivers/platform/msm/gsi/gsi.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/platform/msm/gsi/gsi.c b/drivers/platform/msm/gsi/gsi.c index f32d3d9646c1..fd241f6b62da 100644 --- a/drivers/platform/msm/gsi/gsi.c +++ b/drivers/platform/msm/gsi/gsi.c @@ -1591,15 +1591,21 @@ int gsi_alloc_channel(struct gsi_chan_props *props, unsigned long dev_hdl, return -GSI_STATUS_INVALID_PARAMS; } - if (props->evt_ring_hdl != ~0 && - atomic_read(&gsi_ctx->evtr[props->evt_ring_hdl].chan_ref_cnt) && - gsi_ctx->evtr[props->evt_ring_hdl].props.exclusive) { - GSIERR("evt ring=%lu already in exclusive use chan_hdl=%p\n", + if (props->evt_ring_hdl != ~0) { + if (props->evt_ring_hdl >= GSI_EVT_RING_MAX) { + GSIERR("invalid evt ring=%lu\n", props->evt_ring_hdl); + return -GSI_STATUS_INVALID_PARAMS; + } + + if (atomic_read( + &gsi_ctx->evtr[props->evt_ring_hdl].chan_ref_cnt) && + gsi_ctx->evtr[props->evt_ring_hdl].props.exclusive) { + GSIERR("evt ring=%lu exclusively used by chan_hdl=%p\n", props->evt_ring_hdl, chan_hdl); - return -GSI_STATUS_UNSUPPORTED_OP; + return -GSI_STATUS_UNSUPPORTED_OP; + } } - ctx = &gsi_ctx->chan[props->ch_id]; if (ctx->allocated) { GSIERR("chan %d already allocated\n", props->ch_id); |
