summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Mills <ken.k.mills@intel.com>2010-12-13 15:27:27 +0000
committerAK <andi@firstfloor.org>2011-02-06 11:03:46 -0800
commit1298db626792287d5c66ba71ae802cfd1db72d3f (patch)
tree60afde7a2644c8fe918f5263b0578e96d2b406fa
parent138d1026f3af81004fbdc9864ea56b661780dace (diff)
n_gsm: Fix message length handling when building header
commit be7a7411d63ccad165d66fe8e0b11b2ee336159b upstream. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> Signed-off-by: Andi Kleen <ak@linux.intel.com>
-rw-r--r--drivers/char/n_gsm.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/char/n_gsm.c b/drivers/char/n_gsm.c
index e4089c432f15..3bf479284c35 100644
--- a/drivers/char/n_gsm.c
+++ b/drivers/char/n_gsm.c
@@ -717,8 +717,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 >> 6) | EA;
- *--dp = (msg->len & 127) << 1;
+ *--dp = (msg->len >> 7); /* bits 7 - 15 */
+ *--dp = (msg->len & 127) << 1; /* bits 0 - 6 */
}
}