DVB: negative internal->sub_range won't get noticed
PATCH 1/1 DVB: negative internal->sub_range won't get noticed
internal->sub_range is unsigned, a negative won't get noticed.
---
drivers/media/dvb/frontends/stb0899_algo.c +5 -4
@@ -464,13 +464,14 @@ static void next_sub_range(struct stb0899_state *state)if (internal->sub_dir >0 ) { old_sub_range = internal->sub_range; - internal->sub_range =MIN ((internal->srch_range /2 ) - +if (internal->tuner_offst + internal->sub_range /2 >= + internal->srch_range /2 ) + internal->sub_range =0 ; +else + internal->sub_range =MIN ((internal->srch_range /2 ) - (internal->tuner_offst + internal->sub_range /2 ), internal->sub_range); -if (internal->sub_range <0 ) - internal->sub_range =0 ; - internal->tuner_offst += (old_sub_range + internal->sub_range) /2 ; }
Quoted 16 lines · On Mon, 19 Jan 2009 00:35:47 +0100 Roel Kluin <[email protected]> wrote:
internal->sub_rangeis unsigned, a negative won't get noticed.Signed-off-by Roel Kluin <[email protected]>---
drivers/media/dvb/frontends/stb0899_algo.c +3
-1@@ -464,13 +464,14 @@ static void next_sub_range(struct stb0899_state *state)if (internal->sub_dir >0 ) { old_sub_range = internal->sub_range; - internal->sub_range = MIN((internal->srch_range / 2) - +if (internal->tuner_offst + internal->sub_range /2 >= + internal->srch_range /2 ) + internal->sub_range =0 ;
drivers/media/dvb/frontends/stb0899_algo.c static void next_sub_range(struct stb0899_state *state) · line 476
Quoted 10 lines
drivers/media/dvb/frontends/stb0899_algo.c +2
-3+else + internal->sub_range =MIN ((internal->srch_range /2 ) - (internal->tuner_offst + internal->sub_range /2 ), internal->sub_range); -if (internal->sub_range <0 ) - internal->sub_range =0 ; - internal->tuner_offst += (old_sub_range + internal->sub_range) /2 ; }
I hope someone understands that function :(
Do we actually need that test at all? Perhaps it has never triggered? Perhaps values in the 0x80000000 - 0xffffffff are actually OK?
This driver has managed to get itself a secret private version of the min(), max() and abs() macros. They're buggy - they reference their argument multiple times. The driver should be converted to use the kernel.h versions.
--
video4linux-list mailing list
Unsubscribe mailto:[email protected]?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list