diff options
author | Chen Gang <gang.chen@asianux.com> | 2013-03-07 13:25:41 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-03-08 00:35:44 -0500 |
commit | f39479363e0361c8bb4397481c01a7c3a1a3c8ac (patch) | |
tree | b2619455915812602af6c2f19e84d435d9b8ca7c /drivers/isdn | |
parent | 2e85d67690cf3ea3f074a6e872f675226883fe7f (diff) |
drivers/isdn: checkng length to be sure not memory overflow
sizeof (cmd.parm.cmsg.para) is 50 (MAX_CAPI_PARA_LEN).
sizeof (cmd.parm) is 80+, but less than 100.
strlen(msg) may be more than 80+ (Modem-Commandbuffer, less than 255).
isdn_tty_send_msg is called by isdn_tty_parse_at
the relative parameter is m->mdmcmd (atemu *m)
the relative command may be "+M..."
so need check the length to be sure not memory overflow.
cmd.parm is a union, and need keep original valid buffer length no touch
Signed-off-by: Chen Gang <gang.chen@asianux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/isdn')
-rw-r--r-- | drivers/isdn/i4l/isdn_tty.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c index d8a7d8323414..ebaebdf30f98 100644 --- a/drivers/isdn/i4l/isdn_tty.c +++ b/drivers/isdn/i4l/isdn_tty.c | |||
@@ -902,7 +902,9 @@ isdn_tty_send_msg(modem_info *info, atemu *m, char *msg) | |||
902 | int j; | 902 | int j; |
903 | int l; | 903 | int l; |
904 | 904 | ||
905 | l = strlen(msg); | 905 | l = min(strlen(msg), sizeof(cmd.parm) - sizeof(cmd.parm.cmsg) |
906 | + sizeof(cmd.parm.cmsg.para) - 2); | ||
907 | |||
906 | if (!l) { | 908 | if (!l) { |
907 | isdn_tty_modem_result(RESULT_ERROR, info); | 909 | isdn_tty_modem_result(RESULT_ERROR, info); |
908 | return; | 910 | return; |