On Wed, Nov 18, 2009 at 10:13:48PM +0100, Moritz Muehlenhoff wrote:
> On Tue, Oct 13, 2009 at 11:13:01AM +0000, Gerrit Pape wrote:
> > tags 547902 + patch
> > quit
> 
> [ Adding Christian to CC: ]
> 
> Christian, did you submit your patch upstream?

No, not yet.

It still has the problem that reading the value(s) bytewise returns garbage
if the value(s) change during reading.

But I can try to send it to lkml and see what they say.
Shall I point to this bug-report and may I add a "Tested-by" line ?

        Christian

> 
> Cheers,
>         Moritz
> 
> > Hi, please see http://bugs.debian.org/547902
> > 
> > Here's a patch from Christian Hohnstaedt <chohnsta...@innominate.com>
> > 
> > Thanks, Gerrit.
> >
> > 
> > ---
> > Testparameter:
> > for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; do dd 
> > if=/proc/sys/net/ipv4/tcp_wmem bs=$i 2>/dev/null; done
> > 
> > for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; do dd 
> > if=/proc/sys/net/ipv4/tcp_wmem skip=$i bs=1 2>/dev/null |wc -c ; done
> > 
> > diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> > index 9270125..038df14 100644
> > --- a/kernel/sysctl.c
> > +++ b/kernel/sysctl.c
> > @@ -2117,17 +2117,16 @@ static int __do_proc_dointvec(void *tbl_data, 
> > struct ctl_table *table,
> >  #define TMPBUFLEN 21
> >     int *i, vleft, first=1, neg, val;
> >     unsigned long lval;
> > -   size_t left, len;
> > +   size_t left, len, off;
> >     
> >     char buf[TMPBUFLEN], *p;
> >     char __user *s = buffer;
> >     
> > -   if (!tbl_data || !table->maxlen || !*lenp ||
> > -       (*ppos && !write)) {
> > +   if (!tbl_data || !table->maxlen || !*lenp) {
> >             *lenp = 0;
> >             return 0;
> >     }
> > -   
> > +   off = 0;
> >     i = (int *) tbl_data;
> >     vleft = table->maxlen / sizeof(*i);
> >     left = *lenp;
> > @@ -2176,25 +2175,31 @@ static int __do_proc_dointvec(void *tbl_data, 
> > struct ctl_table *table,
> >                     if (conv(&neg, &lval, i, 1, data))
> >                             break;
> >             } else {
> > +                   loff_t diff;
> >                     p = buf;
> > -                   if (!first)
> > -                           *p++ = '\t';
> > -   
> >                     if (conv(&neg, &lval, i, 0, data))
> >                             break;
> >  
> > -                   sprintf(p, "%s%lu", neg ? "-" : "", lval);
> > -                   len = strlen(buf);
> > -                   if (len > left)
> > -                           len = left;
> > -                   if(copy_to_user(s, buf, len))
> > -                           return -EFAULT;
> > -                   left -= len;
> > -                   s += len;
> > +                   len = sprintf(p, "%s%s%lu", first ? "" : "\t",
> > +                                           neg ? "-" : "", lval);
> > +                   diff = *ppos - off;
> > +                   off += len;
> > +                   if (diff > 0 && diff < len) {
> > +                           p += diff;
> > +                           len -= diff;
> > +                   }
> > +                   if (off > *ppos) {
> > +                           if (len > left)
> > +                                   len = left;
> > +                           if(copy_to_user(s, p, len))
> > +                                   return -EFAULT;
> > +                           left -= len;
> > +                           s += len;
> > +                   }
> >             }
> >     }
> >  
> > -   if (!write && !first && left) {
> > +   if (!write && !first && left && off >= *ppos) {
> >             if(put_user('\n', s))
> >                     return -EFAULT;
> >             left--, s++;
> > 
> > 
> > 
Christian Hohnstaedt

-- 
Christian Hohnstaedt / Project Manager Hardware and Manufacturing

Innominate Security Technologies AG / protecting industrial networks
tel: +49.30.921028.208 / fax: +49.30.921028.020
Rudower Chaussee 13, D-12489 Berlin / http://www.innominate.com

Register Court: AG Charlottenburg, HR B 81603
Management Board: Dirk Seewald
Chairman of the Supervisory Board: Volker Bibelhausen



-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to