Re: get_user <-> scsi-idle

Matti Aarnio (matti.aarnio@tele.fi)
Sat, 25 Jan 1997 21:17:50 +0200 (EET)


> hello all,
> i'm trying to hack scsi-idle to work with 2.1.22. between 2.0.x and 2.1.x,
> get_user changed at least from having one argument to having two arguments.
>
> the code segment, that works with 2.0.xx, is
>
> + if (get_user((long *) arg))
> + scsi_cmd[4] = 1;
> + else
> + scsi_cmd[4] = 0;
> +
>
> could someone recomend a rewrite for 2.1.x? also, a brief description of
> what is going on here would be appreciated. specifically, what is the
> difference in the functioning of the old and new get_user? the code is
> simply too deep for me to read.

"what is going on" with get_user() is described in kernel source
file: Documentation/exception.txt --- generally speaking it is
*DEEP* to read by anybody :-)
(It is also rather unlike the general language specific exception
handling in several programming languages -- these are HARDWARE
exceptions that are handled here in quite ingenious manner. )

The rewrite is:

int val, err;

if ((err = get_user(val, (void*)arg)))
return err;
if (val)
scsi_cmd[4] = 1;
else
scsi_cmd[4] = 0;

(and throw away the verify_area() calls -- but make sure
that you don't do get_user() after starting something
which is difficult to revert latter.)

> regards,
> ben.

/Matti Aarnio <matti.aarnio@tele.fi>