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;
  

Reply via email to