Re: test procedure for cdc-wdm

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Oliver Neukum <oliver@xxxxxxxxxx> writes:

> On Tuesday 26 February 2013 14:59:23 Bjørn Mork wrote:
>> Oliver Neukum <oliver@xxxxxxxxxx> writes:
>> 
>> > @@ -185,9 +187,17 @@ static void wdm_in_callback(struct urb *urb)
>> >  	}
>> >  
>> >  	desc->rerr = status;
>> > -	desc->reslength = urb->actual_length;
>> > -	memmove(desc->ubuf + desc->length, desc->inbuf, desc->reslength);
>> > -	desc->length += desc->reslength;
>> > +	if (length + desc->length > desc->wMaxCommand) {
>> > +		/* The buffer would overflow */
>> > +		set_bit(WDM_OVERFLOW, &desc->flags);
>> > +	} else {
>> > +		/* we may already be in overflow */
>> > +		if (!test_bit(WDM_OVERFLOW, &desc->flags)) {
>> > +			memmove(desc->ubuf + desc->length, desc->inbuf, desc->reslength);
>> > +			desc->length += length;
>> > +			desc->reslength = length;
>> > +		}
>> 
>> 
>> This is not OK.  Should probably be
>
> Thank you!
> The tests failed and I couldn't find out why. Sometimes I am blind.

You're welcome. More than 2 eyes always help :)

I believe we could drop the reslength field altogether, avoiding this
confusion. The field is only use to test for a 0 length read in a
context where desc->length is known to be 0.  In fact, we are really
interested in the total desc->length anyway.  The length of the last
read is completely irrelevant.

If we don't drop it, then I believe you should set it to 0 on overflow.


Bjørn
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux