|
@@ -177,16 +177,21 @@ long asihpi_hpi_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
} else {
|
|
} else {
|
|
u16 __user *ptr = NULL;
|
|
u16 __user *ptr = NULL;
|
|
u32 size = 0;
|
|
u32 size = 0;
|
|
-
|
|
|
|
|
|
+ u32 adapter_present;
|
|
/* -1=no data 0=read from user mem, 1=write to user mem */
|
|
/* -1=no data 0=read from user mem, 1=write to user mem */
|
|
int wrflag = -1;
|
|
int wrflag = -1;
|
|
- u32 adapter = hm->h.adapter_index;
|
|
|
|
- struct hpi_adapter *pa = &adapters[adapter];
|
|
|
|
|
|
+ struct hpi_adapter *pa;
|
|
|
|
+
|
|
|
|
+ if (hm->h.adapter_index < HPI_MAX_ADAPTERS) {
|
|
|
|
+ pa = &adapters[hm->h.adapter_index];
|
|
|
|
+ adapter_present = pa->type;
|
|
|
|
+ } else {
|
|
|
|
+ adapter_present = 0;
|
|
|
|
+ }
|
|
|
|
|
|
- if ((adapter >= HPI_MAX_ADAPTERS) || (!pa->type)) {
|
|
|
|
- hpi_init_response(&hr->r0, HPI_OBJ_ADAPTER,
|
|
|
|
- HPI_ADAPTER_OPEN,
|
|
|
|
- HPI_ERROR_BAD_ADAPTER_NUMBER);
|
|
|
|
|
|
+ if (!adapter_present) {
|
|
|
|
+ hpi_init_response(&hr->r0, hm->h.object,
|
|
|
|
+ hm->h.function, HPI_ERROR_BAD_ADAPTER_NUMBER);
|
|
|
|
|
|
uncopied_bytes =
|
|
uncopied_bytes =
|
|
copy_to_user(puhr, hr, sizeof(hr->h));
|
|
copy_to_user(puhr, hr, sizeof(hr->h));
|