| From 321bcfb023dd7fb8a5ef42947053473291b664bf Mon Sep 17 00:00:00 2001 |
| From: Kangjie Lu <kjlu@umn.edu> |
| Date: Fri, 15 Mar 2019 02:07:12 -0500 |
| Subject: tty: ipwireless: fix missing checks for ioremap |
| |
| [ Upstream commit 1bbb1c318cd8a3a39e8c3e2e83d5e90542d6c3e3 ] |
| |
| ipw->attr_memory and ipw->common_memory are assigned with the |
| return value of ioremap. ioremap may fail, but no checks |
| are enforced. The fix inserts the checks to avoid potential |
| NULL pointer dereferences. |
| |
| Signed-off-by: Kangjie Lu <kjlu@umn.edu> |
| Reviewed-by: David Sterba <dsterba@suse.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/tty/ipwireless/main.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| diff --git a/drivers/tty/ipwireless/main.c b/drivers/tty/ipwireless/main.c |
| index 3475e841ef5c1..4c18bbfe1a92e 100644 |
| --- a/drivers/tty/ipwireless/main.c |
| +++ b/drivers/tty/ipwireless/main.c |
| @@ -114,6 +114,10 @@ static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data) |
| |
| ipw->common_memory = ioremap(p_dev->resource[2]->start, |
| resource_size(p_dev->resource[2])); |
| + if (!ipw->common_memory) { |
| + ret = -ENOMEM; |
| + goto exit1; |
| + } |
| if (!request_mem_region(p_dev->resource[2]->start, |
| resource_size(p_dev->resource[2]), |
| IPWIRELESS_PCCARD_NAME)) { |
| @@ -134,6 +138,10 @@ static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data) |
| |
| ipw->attr_memory = ioremap(p_dev->resource[3]->start, |
| resource_size(p_dev->resource[3])); |
| + if (!ipw->attr_memory) { |
| + ret = -ENOMEM; |
| + goto exit3; |
| + } |
| if (!request_mem_region(p_dev->resource[3]->start, |
| resource_size(p_dev->resource[3]), |
| IPWIRELESS_PCCARD_NAME)) { |
| -- |
| 2.20.1 |
| |