[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PULL 18/21] hw/misc: Add a PWM module for NPCM7XX
From: |
Peter Maydell |
Subject: |
Re: [PULL 18/21] hw/misc: Add a PWM module for NPCM7XX |
Date: |
Mon, 25 Jan 2021 12:04:41 +0000 |
On Wed, 13 Jan 2021 at 17:13, Hao Wu <wuhaotsh@google.com> wrote:
> On Wed, Jan 13, 2021 at 8:03 AM Peter Maydell <peter.maydell@linaro.org>
> wrote:
>> Hi; Coverity reports a possibly-overflowing arithmetic operation here
>> (CID 1442342):
>>
>> > +static uint32_t npcm7xx_pwm_calculate_duty(NPCM7xxPWM *p)
>> > +{
>> > + uint64_t duty;
>> > +
>> > + if (p->running) {
>> > + if (p->cnr == 0) {
>> > + duty = 0;
>> > + } else if (p->cmr >= p->cnr) {
>> > + duty = NPCM7XX_PWM_MAX_DUTY;
>> > + } else {
>> > + duty = NPCM7XX_PWM_MAX_DUTY * (p->cmr + 1) / (p->cnr + 1);
>>
>> Here all of p->cmr, p->cnr and NPCM7XX_PWM_MAX_DUTY are 32-bits,
>> so we calculate the whole expression using 32-bit arithmetic
>> before assigning it to a 64-bit variable. This could be
>> fixed using eg a cast of NPCM7XX_PWM_MAX_DUTY to uint64_t.
>>
>> Incidentally, we don't actually do any 64-bit
>> arithmetic calculations on 'duty' and we return
>> a uint32_t from this function, so 'duty' itself could
>> be a uint32_t, I think...
>
> Since NPCM7XX_PWM_MAX_DUTY =1,000,000 and p->cmr can have up to 65535, The
> overflow is possible. We might want to cast NPCM7XX_PWM_MAX_DUTY to uint64_t
> or #define NPCM7XX_PWM_MAX_DUTY 1000000ULL
> duty itself could be a uint32_t as you point out. Since p->cmr is less than
> p->cnr in this line, duty cannot exceed NPCM7XX_PWM_MAX_DUTY, so there's no
> overflow after this computation.
Hi; were you planning to write a patch for this?
thanks
-- PMM
- [PULL 12/21] target/arm: Don't decode insns in the XScale/iWMMXt space as cp insns, (continued)
- [PULL 12/21] target/arm: Don't decode insns in the XScale/iWMMXt space as cp insns, Peter Maydell, 2021/01/12
- [PULL 13/21] hw/net/lan9118: Fix RX Status FIFO PEEK value, Peter Maydell, 2021/01/12
- [PULL 11/21] docs: Build and install all the docs in a single manual, Peter Maydell, 2021/01/12
- [PULL 09/21] ui/cocoa: Update path to docs in build tree, Peter Maydell, 2021/01/12
- [PULL 14/21] hw/net/lan9118: Add symbolic constants for register offsets, Peter Maydell, 2021/01/12
- [PULL 16/21] hw/timer: Refactor NPCM7XX Timer to use CLK clock, Peter Maydell, 2021/01/12
- [PULL 15/21] hw/misc: Add clock converter in NPCM7XX CLK module, Peter Maydell, 2021/01/12
- [PULL 18/21] hw/misc: Add a PWM module for NPCM7XX, Peter Maydell, 2021/01/12
- [PULL 17/21] hw/adc: Add an ADC module for NPCM7XX, Peter Maydell, 2021/01/12
[PULL 19/21] hw/misc: Add QTest for NPCM7XX PWM Module, Peter Maydell, 2021/01/12
[PULL 20/21] hw/*: Use type casting for SysBusDevice in NPCM7XX, Peter Maydell, 2021/01/12
[PULL 21/21] ui/cocoa: Fix openFile: deprecation on Big Sur, Peter Maydell, 2021/01/12