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 <eugeneteo@kernel.sg> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Родитель
cdeeeae056
Коммит
f73d1e6ca6
|
@ -241,16 +241,17 @@ static ssize_t write(struct file *file, const char __user *in,
|
||||||
cpu = &lg->cpus[cpu_id];
|
cpu = &lg->cpus[cpu_id];
|
||||||
if (!cpu)
|
if (!cpu)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* Once the Guest is dead, you can only read() why it died. */
|
||||||
|
if (lg->dead)
|
||||||
|
return -ENOENT;
|
||||||
|
|
||||||
|
/* If you're not the task which owns the Guest, all you can do
|
||||||
|
* is break the Launcher out of running the Guest. */
|
||||||
|
if (current != cpu->tsk && req != LHREQ_BREAK)
|
||||||
|
return -EPERM;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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;
|
|
||||||
|
|
||||||
switch (req) {
|
switch (req) {
|
||||||
case LHREQ_INITIALIZE:
|
case LHREQ_INITIALIZE:
|
||||||
return initialize(file, input);
|
return initialize(file, input);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче