Patch "staging: gdm724x: Correction of variable usage after applying ALIGN()" has been added to the 3.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
staging: gdm724x: Correction of variable usage after applying ALIGN()
to the 3.14-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:
staging-gdm724x-correction-of-variable-usage-after-applying-align.patch
and it can be found in the queue-3.14 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
892c89d5d7ffd1bb794fe54d86c0eef18d215fabMon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C5=82awomir=20Demeszko?=
<[email protected]>
Date: Tue, 5 May 2015 17:49:54 +0200
Subject: staging: gdm724x: Correction of variable usage after applying ALIGN()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: =?UTF-8?q?S=C5=82awomir=20Demeszko?=
commit 892c89d5d7ffd1bb794fe54d86c0eef18d215fab upstream.
Fix regression introduced by commit <29ef8a53542a>. After it writing AT commands to /dev/GCT-ATM0 is unsuccessful (no echo, no response) and dmesg show "gdmtty: invalid payload : 1 16 f011".
Before that commit value of dummy_cnt was only a padding size. After using ALIGN() this value is increased by its first argument. So the following usage of this variable needs correction.
--- drivers/staging/gdm724x/gdm_mux.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-)
drivers/staging/gdm724x/gdm_mux.c +7 -9
@@ -158,7 +158,7 @@ static int up_to_host(struct mux_rx *r)unsigned int start_flag;unsigned int payload_size;unsigned short packet_type; -int dummy_cnt; +int total_len;u32 packet_size_sum = r->offset;int index;int ret =TO_HOST_INVALID_PACKET ;
@@ -175,10 +175,10 @@ static int up_to_host(struct mux_rx *r)break ; } - dummy_cnt =ALIGN (MUX_HEADER_SIZE + payload_size,4 ); + total_len =ALIGN (MUX_HEADER_SIZE + payload_size,4 );if (len - packet_size_sum < -MUX_HEADER_SIZE + payload_size + dummy_cnt) { + total_len) {pr_err ("invalid payload : %d %d %04x\n" , payload_size, len, packet_type);break ;
@@ -201,7 +201,7 @@ static int up_to_host(struct mux_rx *r)break ; } - packet_size_sum +=MUX_HEADER_SIZE + payload_size + dummy_cnt; + packet_size_sum += total_len;if (len - packet_size_sum <=MUX_HEADER_SIZE +2 ) { ret = r->callback(NULL, 0,
@@ -359,7 +359,6 @@ static int gdm_mux_send(void *priv_dev,struct mux_pkt_header *mux_header;struct mux_tx *t =NULL ;static u32 seq_num =1 ; -int dummy_cnt;int total_len;int ret;unsigned long flags;
@@ -372,9 +371,7 @@ static int gdm_mux_send(void *priv_dev,spin_lock_irqsave (&mux_dev->write_lock, flags); - dummy_cnt =ALIGN (MUX_HEADER_SIZE + len,4 ); - - total_len = len +MUX_HEADER_SIZE + dummy_cnt; + total_len =ALIGN (MUX_HEADER_SIZE + len,4 ); t =alloc_mux_tx (total_len);if (!t) {
@@ -390,7 +387,8 @@ static int gdm_mux_send(void *priv_dev, mux_header->packet_type =__cpu_to_le16 (packet_type[tty_index]);memcpy (t->buf+MUX_HEADER_SIZE , data, len); -memset (t->buf+MUX_HEADER_SIZE +len,0 , dummy_cnt); +memset (t->buf+MUX_HEADER_SIZE +len,0 , total_len -MUX_HEADER_SIZE - + len); t->len = total_len; t->callback = cb;
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/staging-gdm724x-correction-of-variable-usage-after-applying-align.patch