Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 151863 Details for
Bug 231071
CVE-2007-1217 Overflow in CAPI subsystem
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
BZ 230563 RHEL 2.1AS ia64 patch, only compilation tested, need to test with real hardware
rhel2_1-ia64_bz230563.patch (text/plain), 17.26 KB, created by
Radovan Augustin
on 2007-04-06 10:59:23 UTC
(
hide
)
Description:
BZ 230563 RHEL 2.1AS ia64 patch, only compilation tested, need to test with real hardware
Filename:
MIME Type:
Creator:
Radovan Augustin
Created:
2007-04-06 10:59:23 UTC
Size:
17.26 KB
patch
obsolete
>diff -urp linux.orig/drivers/isdn/avmb1/capidrv.c linux/drivers/isdn/avmb1/capidrv.c >--- linux.orig/drivers/isdn/avmb1/capidrv.c 2001-12-21 18:41:54.000000000 +0100 >+++ linux/drivers/isdn/avmb1/capidrv.c 2007-04-04 13:15:27.000000000 +0200 >@@ -1000,6 +1000,7 @@ static void handle_plci(_cmsg * cmsg) > capidrv_contr *card = findcontrbynumber(cmsg->adr.adrController & 0x7f); > capidrv_plci *plcip; > isdn_ctrl cmd; >+ _cdebbuf *cdb; > > if (!card) { > printk(KERN_ERR "capidrv: %s from unknown controller 0x%x\n", >@@ -1132,8 +1133,14 @@ static void handle_plci(_cmsg * cmsg) > break; > } > } >- printk(KERN_ERR "capidrv-%d: %s\n", >- card->contrnr, capi_cmsg2str(cmsg)); >+ cdb = capi_cmsg2str(cmsg); >+ if (cdb) { >+ printk(KERN_WARNING "capidrv-%d: %s\n", >+ card->contrnr, cdb->buf); >+ cdebbuf_free(cdb); >+ } else >+ printk(KERN_WARNING "capidrv-%d: CAPI_INFO_IND InfoNumber %x not handled\n", >+ card->contrnr, cmsg->InfoNumber); > break; > > case CAPI_CONNECT_ACTIVE_CONF: /* plci */ >@@ -1380,10 +1387,18 @@ static void capidrv_signal(__u16 applid, > > while ((*capifuncs->capi_get_message) (global.appid, &skb) == CAPI_NOERROR) { > capi_message2cmsg(&s_cmsg, skb->data); >- if (debugmode > 2) >- printk(KERN_DEBUG "capidrv_signal: applid=%d %s\n", >- applid, capi_cmsg2str(&s_cmsg)); >+ if (debugmode > 2) { >+ _cdebbuf *cdb = capi_cmsg2str(&s_cmsg); > >+ if (cdb) { >+ printk(KERN_DEBUG "%s: applid=%d %s\n", __FUNCTION__, >+ applid, cdb->buf); >+ cdebbuf_free(cdb); >+ } else >+ printk(KERN_DEBUG "%s: applid=%d %s not traced\n", >+ __FUNCTION__, applid, >+ capi_cmd2str(s_cmsg.Command, s_cmsg.Subcommand)); >+ } > if (s_cmsg.Command == CAPI_DATA_B3 > && s_cmsg.Subcommand == CAPI_IND) { > handle_data(&s_cmsg, skb); >diff -urp linux.orig/drivers/isdn/avmb1/capiutil.c linux/drivers/isdn/avmb1/capiutil.c >--- linux.orig/drivers/isdn/avmb1/capiutil.c 2001-12-21 18:41:54.000000000 +0100 >+++ linux/drivers/isdn/avmb1/capiutil.c 2007-04-04 13:30:19.000000000 +0200 >@@ -716,6 +716,9 @@ char *capi_cmd2str(__u8 cmd, __u8 subcmd > > > /*-------------------------------------------------------*/ >+ >+#ifdef CONFIG_CAPI_TRACE >+ > /*-------------------------------------------------------*/ > > static char *pnames[] = >@@ -771,44 +774,76 @@ static char *pnames[] = > }; > > >-static char buf[8192]; >-static char *p = 0; >- > #include <stdarg.h> > > /*-------------------------------------------------------*/ >-static void bufprint(char *fmt,...) >+static _cdebbuf *bufprint(_cdebbuf *cdb, char *fmt,...) > { > va_list f; >+ size_t n,r; >+ >+ if (!cdb) >+ return NULL; > va_start(f, fmt); >- vsprintf(p, fmt, f); >+ r = cdb->size - cdb->pos; >+ n = vsnprintf(cdb->p, r, fmt, f); > va_end(f); >- p += strlen(p); >+ if (n >= r) { >+ /* truncated, need bigger buffer */ >+ size_t ns = 2 * cdb->size; >+ u_char *nb; >+ >+ while ((ns - cdb->pos) <= n) >+ ns *= 2; >+ nb = kmalloc(ns, GFP_ATOMIC); >+ if (!nb) { >+ cdebbuf_free(cdb); >+ return NULL; >+ } >+ memcpy(nb, cdb->buf, cdb->pos); >+ kfree(cdb->buf); >+ nb[cdb->pos] = 0; >+ cdb->buf = nb; >+ cdb->p = cdb->buf + cdb->pos; >+ cdb->size = ns; >+ va_start(f, fmt); >+ r = cdb->size - cdb->pos; >+ n = vsnprintf(cdb->p, r, fmt, f); >+ va_end(f); >+ } >+ cdb->p += n; >+ cdb->pos += n; >+ return cdb; > } > >-static void printstructlen(__u8 * m, unsigned len) >+static _cdebbuf *printstructlen(_cdebbuf *cdb, u8 * m, unsigned len) > { > unsigned hex = 0; >+ >+ if (!cdb) >+ return NULL; > for (; len; len--, m++) > if (isalnum(*m) || *m == ' ') { > if (hex) >- bufprint(">"); >- bufprint("%c", *m); >+ cdb = bufprint(cdb, ">"); >+ cdb = bufprint(cdb, "%c", *m); > hex = 0; > } else { > if (!hex) >- bufprint("<%02x", *m); >+ cdb = bufprint(cdb, "<%02x", *m); > else >- bufprint(" %02x", *m); >+ cdb = bufprint(cdb, " %02x", *m); > hex = 1; > } > if (hex) >- bufprint(">"); >+ cdb = bufprint(cdb, ">"); >+ return cdb; > } > >-static void printstruct(__u8 * m) >+static _cdebbuf *printstruct(_cdebbuf *cdb, u8 * m) > { > unsigned len; >+ > if (m[0] != 0xff) { > len = m[0]; > m += 1; >@@ -816,42 +851,45 @@ static void printstruct(__u8 * m) > len = ((__u16 *) (m + 1))[0]; > m += 3; > } >- printstructlen(m, len); >+ cdb = printstructlen(cdb, m, len); >+ return cdb; > } > > /*-------------------------------------------------------*/ > #define NAME (pnames[cmsg->par[cmsg->p]]) > >-static void protocol_message_2_pars(_cmsg * cmsg, int level) >+static _cdebbuf *protocol_message_2_pars(_cdebbuf *cdb, _cmsg *cmsg, int level) > { > for (; TYP != _CEND; cmsg->p++) { > int slen = 29 + 3 - level; > int i; > >- bufprint(" "); >+ if (!cdb) >+ return NULL; >+ cdb = bufprint(cdb, " "); > for (i = 0; i < level - 1; i++) >- bufprint(" "); >+ cdb = bufprint(cdb, " "); > > switch (TYP) { > case _CBYTE: >- bufprint("%-*s = 0x%x\n", slen, NAME, *(__u8 *) (cmsg->m + cmsg->l)); >+ cdb = bufprint(cdb, "%-*s = 0x%x\n", slen, NAME, *(__u8 *) (cmsg->m + cmsg->l)); > cmsg->l++; > break; > case _CWORD: >- bufprint("%-*s = 0x%x\n", slen, NAME, *(__u16 *) (cmsg->m + cmsg->l)); >+ cdb = bufprint(cdb, "%-*s = 0x%x\n", slen, NAME, *(__u16 *) (cmsg->m + cmsg->l)); > cmsg->l += 2; > break; > case _CDWORD: >- bufprint("%-*s = 0x%lx\n", slen, NAME, *(__u32 *) (cmsg->m + cmsg->l)); >+ cdb = bufprint(cdb, "%-*s = 0x%lx\n", slen, NAME, *(__u32 *) (cmsg->m + cmsg->l)); > cmsg->l += 4; > break; > case _CSTRUCT: >- bufprint("%-*s = ", slen, NAME); >+ cdb = bufprint(cdb, "%-*s = ", slen, NAME); > if (cmsg->m[cmsg->l] == '\0') >- bufprint("default"); >+ cdb = bufprint(cdb, "default"); > else >- printstruct(cmsg->m + cmsg->l); >- bufprint("\n"); >+ cdb = printstruct(cdb, cmsg->m + cmsg->l); >+ cdb = bufprint(cdb, "\n"); > if (cmsg->m[cmsg->l] != 0xff) > cmsg->l += 1 + cmsg->m[cmsg->l]; > else >@@ -862,61 +900,182 @@ static void protocol_message_2_pars(_cms > case _CMSTRUCT: > /*----- Metastruktur 0 -----*/ > if (cmsg->m[cmsg->l] == '\0') { >- bufprint("%-*s = default\n", slen, NAME); >+ cdb = bufprint(cdb, "%-*s = default\n", slen, NAME); > cmsg->l++; > jumpcstruct(cmsg); > } else { > char *name = NAME; > unsigned _l = cmsg->l; >- bufprint("%-*s\n", slen, name); >+ cdb = bufprint(cdb, "%-*s\n", slen, name); > cmsg->l = (cmsg->m + _l)[0] == 255 ? cmsg->l + 3 : cmsg->l + 1; > cmsg->p++; >- protocol_message_2_pars(cmsg, level + 1); >+ cdb = protocol_message_2_pars(cdb, cmsg, level + 1); > } > break; > } > } > } > /*-------------------------------------------------------*/ >-char *capi_message2str(__u8 * msg) >+ >+static _cdebbuf *g_debbuf; >+static u_long g_debbuf_lock; >+static _cmsg *g_cmsg; >+ >+_cdebbuf *cdebbuf_alloc(void) >+{ >+ _cdebbuf *cdb; >+ >+ if (likely(!test_and_set_bit(1, &g_debbuf_lock))) { >+ cdb = g_debbuf; >+ goto init; >+ } else >+ cdb = kmalloc(sizeof(_cdebbuf), GFP_ATOMIC); >+ if (!cdb) >+ return NULL; >+ cdb->buf = kmalloc(CDEBUG_SIZE, GFP_ATOMIC); >+ if (!cdb->buf) { >+ kfree(cdb); >+ return NULL; >+ } >+ cdb->size = CDEBUG_SIZE; >+init: >+ cdb->buf[0] = 0; >+ cdb->p = cdb->buf; >+ cdb->pos = 0; >+ return cdb; >+} >+ >+void cdebbuf_free(_cdebbuf *cdb) > { >+ if (likely(cdb == g_debbuf)) { >+ test_and_clear_bit(1, &g_debbuf_lock); >+ return; >+ } >+ if (likely(cdb)) >+ kfree(cdb->buf); >+ kfree(cdb); >+} > >- _cmsg cmsg; >- p = buf; >- p[0] = 0; >- >- cmsg.m = msg; >- cmsg.l = 8; >- cmsg.p = 0; >- byteTRcpy(cmsg.m + 4, &cmsg.Command); >- byteTRcpy(cmsg.m + 5, &cmsg.Subcommand); >- cmsg.par = cpars[command_2_index(cmsg.Command, cmsg.Subcommand)]; >+_cdebbuf *capi_message2str(u8 * msg) >+{ >+ _cdebbuf *cdb; >+ _cmsg *cmsg; > >- bufprint("%-26s ID=%03d #0x%04x LEN=%04d\n", >- mnames[command_2_index(cmsg.Command, cmsg.Subcommand)], >+ cdb = cdebbuf_alloc(); >+ if (unlikely(!cdb)) >+ return NULL; >+ if (likely(cdb == g_debbuf)) >+ cmsg = g_cmsg; >+ else >+ cmsg = kmalloc(sizeof(_cmsg), GFP_ATOMIC); >+ if (unlikely(!cmsg)) { >+ cdebbuf_free(cdb); >+ return NULL; >+ } >+ cmsg->m = msg; >+ cmsg->l = 8; >+ cmsg->p = 0; >+ byteTRcpy(cmsg->m + 4, &cmsg->Command); >+ byteTRcpy(cmsg->m + 5, &cmsg->Subcommand); >+ cmsg->par = cpars[command_2_index(cmsg->Command, cmsg->Subcommand)]; >+ >+ cdb = bufprint(cdb, "%-26s ID=%03d #0x%04x LEN=%04d\n", >+ mnames[command_2_index(cmsg->Command, cmsg->Subcommand)], > ((unsigned short *) msg)[1], > ((unsigned short *) msg)[3], > ((unsigned short *) msg)[0]); > >- protocol_message_2_pars(&cmsg, 1); >- return buf; >+ cdb = protocol_message_2_pars(cdb, cmsg, 1); >+ if (unlikely(cmsg != g_cmsg)) >+ kfree(cmsg); >+ return cdb; > } > >-char *capi_cmsg2str(_cmsg * cmsg) >+_cdebbuf *capi_cmsg2str(_cmsg * cmsg) > { >- p = buf; >- p[0] = 0; >+ _cdebbuf *cdb; >+ >+ cdb = cdebbuf_alloc(); >+ if (!cdb) >+ return NULL; > cmsg->l = 8; > cmsg->p = 0; >- bufprint("%s ID=%03d #0x%04x LEN=%04d\n", >+ cdb = bufprint(cdb, "%s ID=%03d #0x%04x LEN=%04d\n", > mnames[command_2_index(cmsg->Command, cmsg->Subcommand)], > ((__u16 *) cmsg->m)[1], > ((__u16 *) cmsg->m)[3], > ((__u16 *) cmsg->m)[0]); >- protocol_message_2_pars(cmsg, 1); >- return buf; >+ cdb = protocol_message_2_pars(cdb, cmsg, 1); >+ return cdb; >+} >+ >+int __init cdebug_init(void) >+{ >+ g_cmsg= kmalloc(sizeof(_cmsg), GFP_KERNEL); >+ if (!g_cmsg) >+ return ENOMEM; >+ g_debbuf = kmalloc(sizeof(_cdebbuf), GFP_KERNEL); >+ if (!g_debbuf) { >+ kfree(g_cmsg); >+ return ENOMEM; >+ } >+ g_debbuf->buf = kmalloc(CDEBUG_GSIZE, GFP_KERNEL); >+ if (!g_debbuf->buf) { >+ kfree(g_cmsg); >+ kfree(g_debbuf); >+ return ENOMEM;; >+ } >+ g_debbuf->size = CDEBUG_GSIZE; >+ g_debbuf->buf[0] = 0; >+ g_debbuf->p = g_debbuf->buf; >+ g_debbuf->pos = 0; >+ return 0; >+} >+ >+void __exit cdebug_exit(void) >+{ >+ if (g_debbuf) >+ kfree(g_debbuf->buf); >+ kfree(g_debbuf); >+ kfree(g_cmsg); >+} >+ >+#else /* !CONFIG_CAPI_TRACE */ >+ >+static _cdebbuf g_debbuf = {"CONFIG_CAPI_TRACE not enabled", NULL, 0, 0}; >+ >+_cdebbuf *capi_message2str(u8 * msg) >+{ >+ return &g_debbuf; >+} >+ >+_cdebbuf *capi_cmsg2str(_cmsg * cmsg) >+{ >+ return &g_debbuf; > } > >+_cdebbuf *cdebbuf_alloc(void) >+{ >+ return &g_debbuf; >+} >+ >+void cdebbuf_free(_cdebbuf *cdb) >+{ >+} >+ >+int __init cdebug_init(void) >+{ >+ return 0; >+} >+ >+void __exit cdebug_exit(void) >+{ >+} >+ >+#endif >+ >+EXPORT_SYMBOL(cdebbuf_alloc); >+EXPORT_SYMBOL(cdebbuf_free); > EXPORT_SYMBOL(capi_cmsg2message); > EXPORT_SYMBOL(capi_message2cmsg); > EXPORT_SYMBOL(capi_cmsg_header); >diff -urp linux.orig/drivers/isdn/avmb1/capiutil.h linux/drivers/isdn/avmb1/capiutil.h >--- linux.orig/drivers/isdn/avmb1/capiutil.h 2001-12-21 18:41:54.000000000 +0100 >+++ linux/drivers/isdn/avmb1/capiutil.h 2007-04-04 13:53:57.000000000 +0200 >@@ -174,9 +174,26 @@ char *capi_info2str(__u16 reason); > /* > * Debugging / Tracing functions > */ >+ > char *capi_cmd2str(__u8 cmd, __u8 subcmd); >-char *capi_cmsg2str(_cmsg * cmsg); >-char *capi_message2str(__u8 * msg); >+ >+typedef struct { >+ u_char *buf; >+ u_char *p; >+ size_t size; >+ size_t pos; >+} _cdebbuf; >+ >+#define CDEBUG_SIZE 1024 >+#define CDEBUG_GSIZE 4096 >+ >+_cdebbuf *cdebbuf_alloc(void); >+void cdebbuf_free(_cdebbuf *cdb); >+int cdebug_init(void); >+void cdebug_exit(void); >+ >+_cdebbuf *capi_cmsg2str(_cmsg *cmsg); >+_cdebbuf *capi_message2str(__u8 *msg); > > /*-----------------------------------------------------------------------*/ > >diff -urp linux.orig/drivers/isdn/avmb1/kcapi.c linux/drivers/isdn/avmb1/kcapi.c >--- linux.orig/drivers/isdn/avmb1/kcapi.c 2007-04-04 12:46:44.000000000 +0200 >+++ linux/drivers/isdn/avmb1/kcapi.c 2007-04-04 13:53:00.000000000 +0200 >@@ -822,10 +822,17 @@ static void controllercb_handle_capimsg( > { > int showctl = 0; > __u8 cmd, subcmd; >+ _cdebbuf *cdb; > > if (card->cardstate != CARD_RUNNING) { >- printk(KERN_INFO "kcapi: controller %d not active, got: %s", >- card->cnr, capi_message2str(skb->data)); >+ cdb = capi_message2str(skb->data); >+ if (cdb) { >+ printk(KERN_INFO "kcapi: controller [%03d] not active, got: %s", >+ card->cnr, cdb->buf); >+ cdebbuf_free(cdb); >+ } else >+ printk(KERN_INFO "kcapi: controller [%03d] not active, cannot trace\n", >+ card->cnr); > goto error; > } > cmd = CAPIMSG_COMMAND(skb->data); >@@ -840,17 +847,22 @@ static void controllercb_handle_capimsg( > showctl |= (card->traceflag & 1); > if (showctl & 2) { > if (showctl & 1) { >- printk(KERN_DEBUG "kcapi: got [0x%lx] id#%d %s len=%u\n", >- (unsigned long) card->cnr, >- CAPIMSG_APPID(skb->data), >- capi_cmd2str(cmd, subcmd), >- CAPIMSG_LEN(skb->data)); >+ printk(KERN_DEBUG "kcapi: got [%03d] id#%d %s len=%u\n", >+ card->cnr, CAPIMSG_APPID(skb->data), >+ capi_cmd2str(cmd, subcmd), >+ CAPIMSG_LEN(skb->data)); > } else { >- printk(KERN_DEBUG "kcapi: got [0x%lx] %s\n", >- (unsigned long) card->cnr, >- capi_message2str(skb->data)); >+ cdb = capi_message2str(skb->data); >+ if (cdb) { >+ printk(KERN_DEBUG "kcapi: got [%03d] %s\n", >+ card->cnr, cdb->buf); >+ cdebbuf_free(cdb); >+ } else >+ printk(KERN_DEBUG "kcapi: got [%03d] id#%d %s len=%u, cannot trace\n", >+ card->cnr, CAPIMSG_APPID(skb->data), >+ capi_cmd2str(cmd, subcmd), >+ CAPIMSG_LEN(skb->data)); > } >- > } > skb_queue_tail(&recv_queue, skb); > queue_task(&tq_recv_notify, &tq_immediate); >@@ -873,7 +885,7 @@ static void controllercb_ready(struct ca > card->driver->register_appl(card, appl, &APPL(appl)->rparam); > } > >- printk(KERN_NOTICE "kcapi: card %d \"%s\" ready.\n", >+ printk(KERN_NOTICE "kcapi: card [%03d] \"%s\" ready.\n", > CARDNR(card), card->name); > > notify_push(KCI_CONTRUP, CARDNR(card), 0, 0); >@@ -911,7 +923,7 @@ static void controllercb_reseted(struct > } > } > >- printk(KERN_NOTICE "kcapi: card %d down.\n", CARDNR(card)); >+ printk(KERN_NOTICE "kcapi: card [%03d] down.\n", CARDNR(card)); > > notify_push(KCI_CONTRDOWN, CARDNR(card), 0, 0); > } >@@ -919,7 +931,7 @@ static void controllercb_reseted(struct > static void controllercb_suspend_output(struct capi_ctr *card) > { > if (!card->blocked) { >- printk(KERN_DEBUG "kcapi: card %d suspend\n", CARDNR(card)); >+ printk(KERN_DEBUG "kcapi: card [%03d] suspend\n", CARDNR(card)); > card->blocked = 1; > } > } >@@ -927,7 +939,7 @@ static void controllercb_suspend_output( > static void controllercb_resume_output(struct capi_ctr *card) > { > if (card->blocked) { >- printk(KERN_DEBUG "kcapi: card %d resume\n", CARDNR(card)); >+ printk(KERN_DEBUG "kcapi: card [%03d] resume\n", CARDNR(card)); > card->blocked = 0; > } > } >@@ -981,7 +993,7 @@ drivercb_attach_ctr(struct capi_driver * > } > > ncards++; >- printk(KERN_NOTICE "kcapi: Controller %d: %s attached\n", >+ printk(KERN_NOTICE "kcapi: Controller [%03d]: %s attached\n", > card->cnr, card->name); > return card; > } >@@ -1008,7 +1020,7 @@ static int drivercb_detach_ctr(struct ca > card->procent = 0; > } > card->cardstate = CARD_FREE; >- printk(KERN_NOTICE "kcapi: Controller %d: %s unregistered\n", >+ printk(KERN_NOTICE "kcapi: Controller [%03d]: %s unregistered\n", > card->cnr, card->name); > return 0; > } >@@ -1197,17 +1209,25 @@ static __u16 capi_put_message(__u16 appl > showctl |= (CARD(contr)->traceflag & 1); > if (showctl & 2) { > if (showctl & 1) { >- printk(KERN_DEBUG "kcapi: put [0x%lx] id#%d %s len=%u\n", >+ printk(KERN_DEBUG "kcapi: put [%03d] id#%d %s len=%u\n", > (unsigned long) contr, > CAPIMSG_APPID(skb->data), > capi_cmd2str(cmd, subcmd), > CAPIMSG_LEN(skb->data)); > } else { >- printk(KERN_DEBUG "kcapi: put [0x%lx] %s\n", >+ _cdebbuf *cdb = capi_message2str(skb->data); >+ if (cdb) { >+ printk(KERN_DEBUG "kcapi: put [%03d] %s\n", >+ (unsigned long) contr, >+ cdb->buf); >+ cdebbuf_free(cdb); >+ } else >+ printk(KERN_DEBUG "kcapi: put [%03d] id#%d %s len=%u cannot trace\n", > (unsigned long) contr, >- capi_message2str(skb->data)); >+ CAPIMSG_APPID(skb->data), >+ capi_cmd2str(cmd, subcmd), >+ CAPIMSG_LEN(skb->data)); > } >- > } > CARD(contr)->driver->send_message(CARD(contr), skb); > return CAPI_NOERROR; >@@ -1526,7 +1546,7 @@ static int capi_manufacturer(unsigned in > if (card->cardstate == CARD_FREE) > return -ESRCH; > card->traceflag = fdef.flag; >- printk(KERN_INFO "kcapi: contr %d set trace=%d\n", >+ printk(KERN_INFO "kcapi: contr [%03d] set trace=%d\n", > card->cnr, card->traceflag); > return 0; > } >@@ -1650,6 +1670,11 @@ static int __init kcapi_init(void) > { > char *p; > char rev[32]; >+ int ret; >+ >+ ret = cdebug_init(); >+ if (ret) >+ return ret; > > MOD_INC_USE_COUNT; > >@@ -1692,8 +1717,9 @@ static void __exit kcapi_exit(void) > } else { > strcpy(rev, "1.0"); > } >- > proc_capi_exit(); >+ cdebug_exit(); >+ > printk(KERN_NOTICE "CAPI-driver Rev%s: unloaded\n", rev); > } > >diff -urp linux.orig/drivers/isdn/Config.in linux/drivers/isdn/Config.in >--- linux.orig/drivers/isdn/Config.in 2007-04-04 12:46:44.000000000 +0200 >+++ linux/drivers/isdn/Config.in 2007-04-04 13:10:03.000000000 +0200 >@@ -122,7 +122,7 @@ fi > > tristate 'CAPI2.0 support' CONFIG_ISDN_CAPI > if [ "$CONFIG_ISDN_CAPI" != "n" ]; then >- bool ' Verbose reason code reporting (kernel size +=7K)' CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON >+ bool ' Verbose reason code reporting' CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON > dep_bool ' CAPI2.0 Middleware support (EXPERIMENTAL)' CONFIG_ISDN_CAPI_MIDDLEWARE $CONFIG_EXPERIMENTAL > dep_tristate ' CAPI2.0 /dev/capi support' CONFIG_ISDN_CAPI_CAPI20 $CONFIG_ISDN_CAPI > if [ "$CONFIG_ISDN_CAPI_MIDDLEWARE" = "y" ]; then >@@ -133,6 +133,7 @@ if [ "$CONFIG_ISDN_CAPI" != "n" ]; then > define_tristate CONFIG_ISDN_CAPI_CAPIFS n > fi > fi >+ bool ' CAPI trace support' CONFIG_CAPI_TRACE > dep_tristate ' CAPI2.0 capidrv interface support' CONFIG_ISDN_CAPI_CAPIDRV $CONFIG_ISDN_CAPI $CONFIG_ISDN > fi >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 231071
: 151863 |
151865
|
151866