]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_dahdi: Fix crash during caller ID read
authorKinsey Moore <kmoore@digium.com>
Tue, 12 Nov 2013 15:00:36 +0000 (15:00 +0000)
committerKinsey Moore <kmoore@digium.com>
Tue, 12 Nov 2013 15:00:36 +0000 (15:00 +0000)
Asterisk will sometimes core dump during caller id read on analog
channels due to a negative return value from the read() in
my_get_callerid that slips through as a negative length argument to
callerid_feed() if the errno returned by DAHDI is ELAST. This change
ensures that the negative return is treated properly even when it is
ELAST.

(closes issue ASTERISK-22746)
Reported by: Michael Walton
Patches:
    chan_dahdi_cid_crash_fix.r401410.patch uploaded by Michael Walton (License 6502)
........

Merged revisions 402708 from http://svn.asterisk.org/svn/asterisk/branches/1.8

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@402709 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_dahdi.c

index e9cc7539cae76f79a5cc168785a915d640fa71f9..01ce72d7bb5ec7a7ae98b3f3150ab3f90196235b 100644 (file)
@@ -1800,11 +1800,8 @@ static int my_get_callerid(void *pvt, char *namebuf, char *numbuf, enum analog_e
                 * a failure and die, and returning 2 means no event was received. */
                res = read(p->subs[index].dfd, buf, sizeof(buf));
                if (res < 0) {
-                       if (errno != ELAST) {
-                               ast_log(LOG_WARNING, "read returned error: %s\n", strerror(errno));
-                               callerid_free(p->cs);
-                               return -1;
-                       }
+                       ast_log(LOG_WARNING, "read returned error: %s\n", strerror(errno));
+                       return -1;
                }
 
                if (analog_p->ringt > 0) {