Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 00b597e7 authored by Roman Kiryanov's avatar Roman Kiryanov Committed by Greg Kroah-Hartman
Browse files

goldfish: pipe: ANDROID: Do not crash



Return an error instead of crashing in signalled_pipes_add_locked.

Bug: 72717639
Bug: 66884503
Change-Id: I811ad1932f1600f8bbe4598cdaf206bd96ea921a
Signed-off-by: default avatarRoman Kiryanov <rkir@google.com>
parent 8b274c38
Loading
Loading
Loading
Loading
+9 −5
Original line number Original line Diff line number Diff line
@@ -510,26 +510,30 @@ static unsigned int goldfish_pipe_poll(struct file *filp, poll_table *wait)
	return mask;
	return mask;
}
}


static void signalled_pipes_add_locked(struct goldfish_pipe_dev *dev,
static int signalled_pipes_add_locked(struct goldfish_pipe_dev *dev,
	u32 id, u32 flags)
	u32 id, u32 flags)
{
{
	struct goldfish_pipe *pipe;
	struct goldfish_pipe *pipe;


	BUG_ON(id >= dev->pipes_capacity);
	if (id >= dev->pipes_capacity)
		return -EINVAL;


	pipe = dev->pipes[id];
	pipe = dev->pipes[id];
	if (!pipe)
	if (!pipe)
		return;
		return -ENXIO;

	pipe->signalled_flags |= flags;
	pipe->signalled_flags |= flags;


	if (pipe->prev_signalled || pipe->next_signalled
	if (pipe->prev_signalled || pipe->next_signalled
		|| dev->first_signalled_pipe == pipe)
		|| dev->first_signalled_pipe == pipe)
		return;	/* already in the list */
		return 0;  /* already in the list */

	pipe->next_signalled = dev->first_signalled_pipe;
	pipe->next_signalled = dev->first_signalled_pipe;
	if (dev->first_signalled_pipe)
	if (dev->first_signalled_pipe)
		dev->first_signalled_pipe->prev_signalled = pipe;
		dev->first_signalled_pipe->prev_signalled = pipe;

	dev->first_signalled_pipe = pipe;
	dev->first_signalled_pipe = pipe;

	return 0;
}
}


static void signalled_pipes_remove_locked(struct goldfish_pipe_dev *dev,
static void signalled_pipes_remove_locked(struct goldfish_pipe_dev *dev,