Skip to contentSkip to conversation

Patch "ASoC: hdmi-codec: use unsigned type to structure members with bit-field" has been added to the 4.9-stable tree

PATCH [email protected] 1 participant 1 message Jan 17, 2017

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

ASoC: hdmi-codec: use unsigned type to structure members with bit-field

to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
asoc-hdmi-codec-use-unsigned-type-to-structure-members-with-bit-field.patch
and it can be found in the queue-4.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From 9e4d59ada4d602e78eee9fb5f898ce61fdddb446 Mon Sep 17 00:00:00 2001

From: Takashi Sakamoto <[email protected]>
Date: Fri, 16 Dec 2016 18:26:54 +0900
Subject: ASoC: hdmi-codec: use unsigned type to structure members with bit-field

From: Takashi Sakamoto <[email protected]>

commit 9e4d59ada4d602e78eee9fb5f898ce61fdddb446 upstream.

This is a fix for Linux 4.10-rc1.

In C language specification, a bit-field is interpreted as a signed or unsigned integer type consisting of the specified number of bits.

In GCC manual, the range of a signed bit field of N bits is from -(2^N) / 2 to ((2^N) / 2) - 1
https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Bit-Fields

Therefore, when defined as 1 bit-field with signed type, variables can represents -1 and 0.

The snd-soc-hdmi-codec module includes a structure which has signed type members with bit-fields. Codes of this module assign 0 and 1 to the members. This seems to result in implementation-dependent behaviours.

As of v4.10-rc1 merge window, outside of sound subsystem, this structure is referred by below GPU modules.
- tda998x
- sti-drm
- mediatek-drm-hdmi
- msm

As long as I review their codes relevant to the structure, the structure members are used just for condition statements and printk formats. My proposal of change is a bit intrusive to the printk formats but this may be acceptable.

Totally, it's reasonable to use unsigned type for the structure members. This bug is detected by Sparse, static code analyzer with below warnings.

./include/sound/hdmi-codec.h:39:26: error: dubious one-bit signed bitfield ./include/sound/hdmi-codec.h:40:28: error: dubious one-bit signed bitfield ./include/sound/hdmi-codec.h:41:29: error: dubious one-bit signed bitfield ./include/sound/hdmi-codec.h:42:31: error: dubious one-bit signed bitfield

Fixes 09184118a8ab ("ASoC: hdmi-codec: Add hdmi-codec for external HDMI-encoders")
---
 include/sound/hdmi-codec.h |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
include/sound/hdmi-codec.h +4 -4
@@ -36,10 +36,10 @@ struct hdmi_codec_daifmt {
 		HDMI_AC97,
 		HDMI_SPDIF,
 	} fmt;
-	int bit_clk_inv:1;
-	int frame_clk_inv:1;
-	int bit_clk_master:1;
-	int frame_clk_master:1;
+	unsigned int bit_clk_inv:1;
+	unsigned int frame_clk_inv:1;
+	unsigned int bit_clk_master:1;
+	unsigned int frame_clk_master:1;
 };
 
 /*

Patches currently in stable-queue which might be from [email protected] are

queue-4.9/asoc-hdmi-codec-use-unsigned-type-to-structure-members-with-bit-field.patch