Andrew,
See if the patch below helps your problem. Having read the reply from
Sun, I think I've picked up on what they found at fault. At this point
in time I haven't had a chance to compile it but it looks safe O:-)
Cheers,
Darren
Index: solaris.c
===================================================================
RCS file: /devel/CVS/IP-Filter/solaris.c,v
retrieving revision 2.15.2.33
diff -c -r2.15.2.33 solaris.c
*** solaris.c 6 Dec 2002 11:42:22 -0000 2.15.2.33
--- solaris.c 15 Aug 2003 22:31:57 -0000
***************
*** 1298,1309 ****
mblk_t *mb;
{
struct iocblk *ioc;
int ret;
if (fr_running <= 0) {
! mb->b_prev = NULL;
! freemsg(mb);
! return 0;
}
if (MTYPE(mb) != M_IOCTL)
--- 1298,1311 ----
mblk_t *mb;
{
struct iocblk *ioc;
+ int (*func) __P((queue_t *, mblk_t *));
int ret;
if (fr_running <= 0) {
! func = ipf_ip_inp;
! if (func == NULL) /* already restored ? */
! return (*ipinfo.st_wrinit->qi_putp)(q,mb);
! return (*func)(q, mb);
}
if (MTYPE(mb) != M_IOCTL)
***************
*** 1312,1320 ****
READ_ENTER(&ipf_solaris);
if (fr_running <= 0) {
RWLOCK_EXIT(&ipf_solaris);
! mb->b_prev = NULL;
! freemsg(mb);
! return 0;
}
ioc = (struct iocblk *)mb->b_rptr;
--- 1314,1323 ----
READ_ENTER(&ipf_solaris);
if (fr_running <= 0) {
RWLOCK_EXIT(&ipf_solaris);
! func = ipf_ip_inp;
! if (func == NULL) /* already restored ? */
! return (*ipinfo.st_wrinit->qi_putp)(q,mb);
! return (*func)(q, mb);
}
ioc = (struct iocblk *)mb->b_rptr;