bus: arm-ccn: Fix error handling at event allocation
PATCH 1/1 bus: arm-ccn: Fix error handling at event allocation
The bitfield allocation function returns error condition as a negative value, but in two cases its result was assigned to an unsigned member of the hw_perf_event structure, thus the error would not be ever detected.
Fixed by using an intermediate, signed variable.
---
Dan discovered the problem using his static checker. Thanks, Dan!
Arnd, would you pick up the patch as it is or do you want me to send a pull request for a "ccn/fixes" branch?
drivers/bus/arm-ccn.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
drivers/bus/arm-ccn.c +5 -4
@@ -591,7 +591,7 @@ static int arm_ccn_pmu_event_init(struct perf_event *event)struct arm_ccn *ccn;struct hw_perf_event *hw = &event->hw;u32 node_xp, type, event_id; -int valid; +int valid, bit;struct arm_ccn_component *source;int i;
@@ -713,17 +713,18 @@ static int arm_ccn_pmu_event_init(struct perf_event *event)/* Allocate an event source or a watchpoint */ if (type ==CCN_TYPE_XP && event_id ==CCN_EVENT_WATCHPOINT ) - hw->config_base =arm_ccn_pmu_alloc_bit (source->xp.dt_cmp_mask, + bit =arm_ccn_pmu_alloc_bit (source->xp.dt_cmp_mask,CCN_NUM_XP_WATCHPOINTS );else - hw->config_base =arm_ccn_pmu_alloc_bit (source->pmu_events_mask, + bit =arm_ccn_pmu_alloc_bit (source->pmu_events_mask,CCN_NUM_PMU_EVENTS ); -if (hw->config_base <0 ) { +if (bit <0 ) {dev_warn (ccn->dev,"No more event sources/watchpoints on node/XP %d!\n" , node_xp);clear_bit (hw->idx, ccn->dt.pmu_counters_mask);return -EAGAIN ; } + hw->config_base = bit; ccn->dt.pmu_counters[hw->idx].event = event;
Signature · 1 line
1.9.1
PATCH 1/1 bus: arm-ccn: Fix error handling at event allocation
Quoted 7 lines · Pawel Moll
The bitfield allocation function returns error condition as a negative value, but in two cases its result was assigned to an unsigned member of the
hw_perf_eventstructure, thus the error would not be ever detected.Fixed by using an intermediate, signed variable.
Quoted 8 lines
Reported-by Dan Carpenter <[email protected]>Signed-off-by Pawel Moll <[email protected]>---
Dan discovered the problem using his static checker. Thanks, Dan!
Arnd, would you pick up the patch as it is or do you want me to send a pull request for a "ccn/fixes" branch?
I've started to prefer applying patches for cases like these, single-patch pull requests are actually more work than doing that.
So: applied on top of next/drivers, where the CCN driver was merged as well.
Thanks!
-Olof