diff mbox series

[v2] drm/edid: Fix uninitialized variable in drm_cvt_modes()

Message ID 20201103221510.575827-1-lyude@redhat.com
State New
Headers show
Series [v2] drm/edid: Fix uninitialized variable in drm_cvt_modes() | expand

Commit Message

Lyude Paul Nov. 3, 2020, 10:15 p.m. UTC
Noticed this when trying to compile with -Wall on a kernel fork. We potentially
don't set width here, which causes the compiler to complain about width
potentially being uninitialized in drm_cvt_modes(). So, let's fix that.

Changes since v1:
* Don't emit an error as this code isn't reachable, just mark it as such

Signed-off-by: Lyude Paul <lyude@redhat.com>

Cc: <stable@vger.kernel.org> # v5.9+
Fixes: 3f649ab728cd ("treewide: Remove uninitialized_var() usage")
Signed-off-by: Lyude Paul <lyude@redhat.com>
---
 drivers/gpu/drm/drm_edid.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Ilia Mirkin Nov. 3, 2020, 10:21 p.m. UTC | #1
On Tue, Nov 3, 2020 at 5:15 PM Lyude Paul <lyude@redhat.com> wrote:
>

> Noticed this when trying to compile with -Wall on a kernel fork. We potentially

> don't set width here, which causes the compiler to complain about width

> potentially being uninitialized in drm_cvt_modes(). So, let's fix that.

>

> Changes since v1:

> * Don't emit an error as this code isn't reachable, just mark it as such

>

> Signed-off-by: Lyude Paul <lyude@redhat.com>

>

> Cc: <stable@vger.kernel.org> # v5.9+

> Fixes: 3f649ab728cd ("treewide: Remove uninitialized_var() usage")

> Signed-off-by: Lyude Paul <lyude@redhat.com>

> ---

>  drivers/gpu/drm/drm_edid.c | 6 +++++-

>  1 file changed, 5 insertions(+), 1 deletion(-)

>

> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c

> index 631125b46e04..0643b98c6383 100644

> --- a/drivers/gpu/drm/drm_edid.c

> +++ b/drivers/gpu/drm/drm_edid.c

> @@ -3094,6 +3094,7 @@ static int drm_cvt_modes(struct drm_connector *connector,

>

>         for (i = 0; i < 4; i++) {

>                 int width, height;

> +               u8 cvt_aspect_ratio;

>

>                 cvt = &(timing->data.other_data.data.cvt[i]);

>

> @@ -3101,7 +3102,8 @@ static int drm_cvt_modes(struct drm_connector *connector,

>                         continue;

>

>                 height = (cvt->code[0] + ((cvt->code[1] & 0xf0) << 4) + 1) * 2;

> -               switch (cvt->code[1] & 0x0c) {

> +               cvt_aspect_ratio = cvt->code[1] & 0x0c;


The temp var doesn't do anything now right? Previously you were using
it in the print, but now you can drop these two hunks, I think?

  -ilia

> +               switch (cvt_aspect_ratio) {

>                 case 0x00:

>                         width = height * 4 / 3;

>                         break;

> @@ -3114,6 +3116,8 @@ static int drm_cvt_modes(struct drm_connector *connector,

>                 case 0x0c:

>                         width = height * 15 / 9;

>                         break;

> +               default:

> +                       unreachable();

>                 }

>

>                 for (j = 1; j < 5; j++) {

> --

> 2.28.0

>
kernel test robot Nov. 4, 2020, 5:05 a.m. UTC | #2
Hi Lyude,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm-intel/for-linux-next]
[also build test WARNING on drm-tip/drm-tip drm-exynos/exynos-drm-next tegra-drm/drm/tegra/for-next linus/master v5.10-rc2 next-20201103]
[cannot apply to drm/drm-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Lyude-Paul/drm-edid-Fix-uninitialized-variable-in-drm_cvt_modes/20201104-061621
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: x86_64-randconfig-a011-20201104 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
        # https://github.com/0day-ci/linux/commit/ca77ba73371e528e2bb9e631817c614717b4f794
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Lyude-Paul/drm-edid-Fix-uninitialized-variable-in-drm_cvt_modes/20201104-061621
        git checkout ca77ba73371e528e2bb9e631817c614717b4f794
        # save the attached .config to linux build tree
        make W=1 ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/gpu/drm/drm_edid.o: warning: objtool: do_cvt_mode() falls through to next function drm_mode_std.isra.0()

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff mbox series

Patch

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 631125b46e04..0643b98c6383 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -3094,6 +3094,7 @@  static int drm_cvt_modes(struct drm_connector *connector,
 
 	for (i = 0; i < 4; i++) {
 		int width, height;
+		u8 cvt_aspect_ratio;
 
 		cvt = &(timing->data.other_data.data.cvt[i]);
 
@@ -3101,7 +3102,8 @@  static int drm_cvt_modes(struct drm_connector *connector,
 			continue;
 
 		height = (cvt->code[0] + ((cvt->code[1] & 0xf0) << 4) + 1) * 2;
-		switch (cvt->code[1] & 0x0c) {
+		cvt_aspect_ratio = cvt->code[1] & 0x0c;
+		switch (cvt_aspect_ratio) {
 		case 0x00:
 			width = height * 4 / 3;
 			break;
@@ -3114,6 +3116,8 @@  static int drm_cvt_modes(struct drm_connector *connector,
 		case 0x0c:
 			width = height * 15 / 9;
 			break;
+		default:
+			unreachable();
 		}
 
 		for (j = 1; j < 5; j++) {