Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1338033
| From | Peter Rosin <peda@lysator.liu.se> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | m88ds3103: Undefined division |
| Date | 2016-02-19 11:20 +0100 |
| Message-ID | <r3Qki-3vx-17@gated-at.bofh.it> (permalink) |
| Organization | linux.* mail to news gateway |
Hi! I'm looking at this code in drivers/media/dvb-frontends/m88ds3103.c in the m88ds3103_set_frontend() function, line 600 (give or take): s32tmp = 0x10000 * (tuner_frequency - c->frequency); s32tmp = DIV_ROUND_CLOSEST(s32tmp, priv->mclk_khz); if (s32tmp < 0) s32tmp += 0x10000; There is code that tries to handle negative s32tmp, so I assume that negative s32tmp is a possibility. Further, priv->mclk_khz is an unsigned type as far as I can tell. But then we have this comment for the DIV_ROUND_CLOSEST macro: /* * Divide positive or negative dividend by positive divisor and round * to closest integer. Result is undefined for negative divisors and * for negative dividends if the divisor variable type is unsigned. */ #define DIV_ROUND_CLOSEST(x, divisor)( \ I don't know how bad this is, and what the consequences of garbage are, but from here it looks like a problem waiting to happen... Cheers, Peter
Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread
m88ds3103: Undefined division Peter Rosin <peda@lysator.liu.se> - 2016-02-19 11:20 +0100 Re: m88ds3103: Undefined division Antti Palosaari <crope@iki.fi> - 2016-02-19 11:50 +0100
csiph-web