| From be7a7411d63ccad165d66fe8e0b11b2ee336159b Mon Sep 17 00:00:00 2001 |
| From: Ken Mills <ken.k.mills@intel.com> |
| Date: Mon, 13 Dec 2010 15:27:27 +0000 |
| Subject: n_gsm: Fix message length handling when building header |
| |
| From: Ken Mills <ken.k.mills@intel.com> |
| |
| 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> |
| |
| --- |
| drivers/char/n_gsm.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/char/n_gsm.c |
| +++ b/drivers/char/n_gsm.c |
| @@ -716,8 +716,8 @@ static void __gsm_data_queue(struct gsm_ |
| 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 */ |
| } |
| } |
| |