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

Commit 48b950ff authored by Daniel Ritz's avatar Daniel Ritz Committed by Dominik Brodowski
Browse files

[PATCH] pcmcia/pcmcia_resource.c: fix crash when using Cardbus cards



Using the old ioctl interface together with cardbus card gives a NULL
pointer dereference since cardbus devices don't have a struct pcmcia_device.
also s->io[0].res can be NULL as well.

Fix is to move the pcmcia code after the cardbus code and to check for a null
pointer.

Signed-off-by: default avatarDaniel Ritz <daniel.ritz@gmx.ch>
Signed-off-by: default avatarDominik Brodowski <linux@dominikbrodowski.net>
parent daaeb72b
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -208,7 +208,6 @@ int pccard_get_configuration_info(struct pcmcia_socket *s,
	if (!(s->state & SOCKET_PRESENT))
		return CS_NO_CARD;

	config->Function = p_dev->func;

#ifdef CONFIG_CARDBUS
	if (s->state & SOCKET_CARDBUS) {
@@ -222,14 +221,22 @@ int pccard_get_configuration_info(struct pcmcia_socket *s,
			config->AssignedIRQ = s->irq.AssignedIRQ;
			if (config->AssignedIRQ)
				config->Attributes |= CONF_ENABLE_IRQ;
			if (s->io[0].res) {
				config->BasePort1 = s->io[0].res->start;
				config->NumPorts1 = s->io[0].res->end - config->BasePort1 + 1;
			}
		}
		return CS_SUCCESS;
	}
#endif

	c = (p_dev) ? p_dev->function_config : NULL;
	if (p_dev) {
		c = p_dev->function_config;
		config->Function = p_dev->func;
	} else {
		c = NULL;
		config->Function = 0;
	}

	if ((c == NULL) || !(c->state & CONFIG_LOCKED)) {
		config->Attributes = 0;