2008-02-09 15:53:40

by Eugene Teo

[permalink] [raw]
Subject: [PATCH] lguest: make sure cpu is initialized before accessing it

If req is LHREQ_INITIALIZE, and the guest has been initialized before
(unlikely), it will attempt to access cpu->tsk even though cpu is not yet
initialized.

Signed-off-by: Eugene Teo <[email protected]>
---
drivers/lguest/lguest_user.c | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/lguest/lguest_user.c b/drivers/lguest/lguest_user.c
index 85d42d3..9cbb285 100644
--- a/drivers/lguest/lguest_user.c
+++ b/drivers/lguest/lguest_user.c
@@ -241,15 +241,15 @@ static ssize_t write(struct file *file, const char __user *in,
cpu = &lg->cpus[cpu_id];
if (!cpu)
return -EINVAL;
- }

- /* Once the Guest is dead, all you can do is read() why it died. */
- if (lg && lg->dead)
- return -ENOENT;
+ /* Once the Guest is dead, all you can do is read() why it died. */
+ if (lg && lg->dead)
+ return -ENOENT;

- /* If you're not the task which owns the Guest, you can only break */
- if (lg && current != cpu->tsk && req != LHREQ_BREAK)
- return -EPERM;
+ /* If you're not the task which owns the Guest, you can only break */
+ if (lg && current != cpu->tsk && req != LHREQ_BREAK)
+ return -EPERM;
+ }

switch (req) {
case LHREQ_INITIALIZE:


2008-03-04 00:20:33

by Rusty Russell

[permalink] [raw]
Subject: Re: [PATCH] lguest: make sure cpu is initialized before accessing it

On Tuesday 04 March 2008 10:15:47 Rusty Russell wrote:
> On Sunday 10 February 2008 02:53:17 Eugene Teo wrote:
> > If req is LHREQ_INITIALIZE, and the guest has been initialized before
> > (unlikely), it will attempt to access cpu->tsk even though cpu is not yet
> > initialized.
> >
> > Signed-off-by: Eugene Teo <[email protected]>

Thanks Eugene, I've applied this with some wrapping of the comments and
removal of the now-redundant lg != NULL tests:

> > + /* Once the Guest is dead, all you can do is read() why it died. */
> > + if (lg && lg->dead)
> > + return -ENOENT;
> >
> > - /* If you're not the task which owns the Guest, you can only break */
> > - if (lg && current != cpu->tsk && req != LHREQ_BREAK)
> > - return -EPERM;
> > + /* If you're not the task which owns the Guest, you can only break */
> > + if (lg && current != cpu->tsk && req != LHREQ_BREAK)
> > + return -EPERM;
> > + }

Cheers,
Rusty.