summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKen Mills <ken.k.mills@intel.com>2010-12-13 16:27:27 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2010-12-16 22:03:12 +0100
commitbe7a7411d63ccad165d66fe8e0b11b2ee336159b (patch)
treec2e7f6c286106f4f66dbefd987cbbeb5121a6862
parentLinux 2.6.37-rc5 (diff)
downloadlinux-be7a7411d63ccad165d66fe8e0b11b2ee336159b.tar.xz
linux-be7a7411d63ccad165d66fe8e0b11b2ee336159b.zip
n_gsm: Fix message length handling when building header
Fix message length handling when building header When the message length is greater than 127, the length field in the header is built incorrectly. According to the spec, when the length is less than 128 the length field is a single byte formatted as: bbbbbbb1. When it is greater than 127 then the field is two bytes of the format: bbbbbbb0 bbbbbbbb. Signed-off-by: Ken Mills <ken.k.mills@intel.com> Signed-off-by: Alan Cox <alan@linux.intel.com> Cc: stable@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/tty/n_gsm.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
index 81b46585edf7..2fc5cf27152a 100644
--- a/drivers/tty/n_gsm.c
+++ b/drivers/tty/n_gsm.c
@@ -716,8 +716,8 @@ static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg)
if (msg->len < 128)
*--dp = (msg->len << 1) | EA;
else {
- *--dp = ((msg->len & 127) << 1) | EA;
- *--dp = (msg->len >> 6) & 0xfe;
+ *--dp = (msg->len >> 7); /* bits 7 - 15 */
+ *--dp = (msg->len & 127) << 1; /* bits 0 - 6 */
}
}