patch "staging: gdm724x: Correction of variable usage after applying ALIGN()" added to staging-linus
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 my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
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
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 ;
@@ -176,10 +176,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 ;
@@ -202,7 +202,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,
@@ -361,7 +361,6 @@ static int gdm_mux_send(void *priv_dev, void *data, int len, int tty_index,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;
@@ -374,9 +373,7 @@ static int gdm_mux_send(void *priv_dev, void *data, int len, int tty_index,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) {
@@ -392,7 +389,8 @@ static int gdm_mux_send(void *priv_dev, void *data, int len, int tty_index, 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;
Signature · 1 line
2.4.0