>>>>> On Sun, 15 Jul 2001 09:19:27 -0700
>>>>> Julian Elischer <[EMAIL PROTECTED]> said:

julian> NOWAIT MAY return.
julian> you have not handled the case for when it returns with a NULL allocation
julian> so if it returns NULL you continue, and page-fault immediatly.

Oops, thank you.
How about this?

Index: sys/net/if.c
diff -u sys/net/if.c.orig sys/net/if.c
--- sys/net/if.c.orig   Mon Jul 16 01:39:34 2001
+++ sys/net/if.c        Mon Jul 16 01:51:49 2001
@@ -1412,8 +1412,14 @@
                llsa = 0;
        }
 
-       MALLOC(ifma, struct ifmultiaddr *, sizeof *ifma, M_IFMADDR, M_WAITOK);
-       MALLOC(dupsa, struct sockaddr *, sa->sa_len, M_IFMADDR, M_WAITOK);
+       MALLOC(ifma, struct ifmultiaddr *, sizeof *ifma, M_IFMADDR, M_NOWAIT);
+       if (iama == NULL)
+               return (ENOBUFS);
+       MALLOC(dupsa, struct sockaddr *, sa->sa_len, M_IFMADDR, M_NOWAIT);
+       if (dupsa == NULL) {
+               FREE(ifma, M_IFMADDR);
+               return (ENOBUFS);
+       }
        bcopy(sa, dupsa, sa->sa_len);
 
        ifma->ifma_addr = dupsa;
@@ -1441,9 +1447,15 @@
                        ifma->ifma_refcount++;
                } else {
                        MALLOC(ifma, struct ifmultiaddr *, sizeof *ifma,
-                              M_IFMADDR, M_WAITOK);
+                              M_IFMADDR, M_NOWAIT);
+                       if (iama == NULL)
+                               return (ENOBUFS);
                        MALLOC(dupsa, struct sockaddr *, llsa->sa_len,
-                              M_IFMADDR, M_WAITOK);
+                              M_IFMADDR, M_NOWAIT);
+                       if (dupsa == NULL) {
+                               FREE(ifma, M_IFMADDR);
+                               return (ENOBUFS);
+                       }
                        bcopy(llsa, dupsa, llsa->sa_len);
                        ifma->ifma_addr = dupsa;
                        ifma->ifma_ifp = ifp;

--
Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
[EMAIL PROTECTED]  [EMAIL PROTECTED]  ume@{,jp.}FreeBSD.org
http://www.imasy.org/~ume/

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to