MLK-20216-1: drm/imx/dcss: fix suspicious sign extension
authorLaurentiu Palcu <laurentiu.palcu@nxp.com>
Wed, 14 Nov 2018 12:43:13 +0000 (14:43 +0200)
committerLeonard Crestez <leonard.crestez@nxp.com>
Wed, 17 Apr 2019 23:51:34 +0000 (02:51 +0300)
This addresses Coverity issues related to "Suspicious sign extension"
when an u16 is promoted to int (32bit signed) and then to u64. If the
resulting int is greater than 0x7fffffff the upper bits of the u64 will
all be 1.

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@nxp.com>
drivers/gpu/imx/dcss/dcss-dpr.c
drivers/gpu/imx/dcss/dcss-ss.c

index e8c551e..c8fe118 100644 (file)
@@ -391,7 +391,7 @@ void dcss_dpr_addr_set(struct dcss_soc *dcss, int ch_num, u32 luma_base_addr,
                pitch = ch->pitch;
 
        ch->frame_ctrl &= ~PITCH_MASK;
-       ch->frame_ctrl |= ((pitch << PITCH_POS) & PITCH_MASK);
+       ch->frame_ctrl |= (((u32)pitch << PITCH_POS) & PITCH_MASK);
 }
 EXPORT_SYMBOL(dcss_dpr_addr_set);
 
index 83086e7..bb9b2d8 100644 (file)
@@ -195,19 +195,20 @@ void dcss_ss_sync_set(struct dcss_soc *dcss, struct videomode *vm,
        hsync_end = vm->hsync_len - 1;
 
        dcss_ss_write(ss, (phsync ? SYNC_POL : 0) |
-                     (hsync_end << SYNC_END_POS) | hsync_start,
+                     ((u32)hsync_end << SYNC_END_POS) | hsync_start,
                      DCSS_SS_HSYNC);
 
        vsync_start = vm->vfront_porch - 1;
        vsync_end = vm->vfront_porch + vm->vsync_len - 1;
 
        dcss_ss_write(ss, (pvsync ? SYNC_POL : 0) |
-                     (vsync_end << SYNC_END_POS) | vsync_start, DCSS_SS_VSYNC);
+                     ((u32)vsync_end << SYNC_END_POS) | vsync_start,
+                     DCSS_SS_VSYNC);
 
        de_ulc_x = vm->hsync_len + vm->hback_porch - 1;
        de_ulc_y = vm->vsync_len + vm->vfront_porch + vm->vback_porch;
 
-       dcss_ss_write(ss, SYNC_POL | (de_ulc_y << ULC_Y_POS) | de_ulc_x,
+       dcss_ss_write(ss, SYNC_POL | ((u32)de_ulc_y << ULC_Y_POS) | de_ulc_x,
                      DCSS_SS_DE_ULC);
 
        de_lrc_x = vm->hsync_len + vm->hback_porch + vm->hactive - 1;