Print this page
3354 kernel crash in rpcsec_gss after using gsscred
Reviewed by: Toomas Soome <tsoome@me.com>
Reviewed by: Carlos Neira <cneirabustos@gmail.com>
Approved by: Robert Mustacchi <rm@joyent.com>
NEX-4123 xdrmblk_getpos() is unreliable
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
re #13613 rb4516 Tunables needs volatile keyword
closes  #11843 rb3753 - NFSv3/UDP server sends packets with wrong Source IP in header (picked from ncp3-gate)

*** 21,30 **** --- 21,32 ---- /* * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012 by Delphix. All rights reserved. + * Copyright 2012 Marcel Telka <marcel@telka.sk> + * Copyright 2018 OmniOS Community Edition (OmniOSce) Association. */ /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */
*** 99,118 **** svc_clts_kgetres, /* Get pointer to response buffer */ svc_clts_kfreeres, /* Destroy pre-serialized response header */ svc_clts_kclone_destroy, /* Destroy a clone xprt */ svc_clts_kstart, /* Tell `ready-to-receive' to rpcmod */ svc_clts_kclone_xprt, /* transport specific clone xprt function */ ! svc_clts_ktattrs /* Transport specific attributes. */ }; /* * Transport private data. * Kept in xprt->xp_p2buf. */ struct udp_data { mblk_t *ud_resp; /* buffer for response */ mblk_t *ud_inmp; /* mblk chain of request */ }; #define UD_MAXSIZE 8800 #define UD_INITSIZE 2048 --- 101,123 ---- svc_clts_kgetres, /* Get pointer to response buffer */ svc_clts_kfreeres, /* Destroy pre-serialized response header */ svc_clts_kclone_destroy, /* Destroy a clone xprt */ svc_clts_kstart, /* Tell `ready-to-receive' to rpcmod */ svc_clts_kclone_xprt, /* transport specific clone xprt function */ ! svc_clts_ktattrs, /* Transport specific attributes */ ! rpcmod_hold, /* Increment transport reference count */ ! rpcmod_release /* Decrement transport reference count */ }; /* * Transport private data. * Kept in xprt->xp_p2buf. */ struct udp_data { mblk_t *ud_resp; /* buffer for response */ mblk_t *ud_inmp; /* mblk chain of request */ + sin6_t ud_local; /* local address */ }; #define UD_MAXSIZE 8800 #define UD_INITSIZE 2048
*** 322,331 **** --- 327,338 ---- */ clone_xprt->xp_rtaddr.buf = (char *)mp->b_rptr + pptr->unitdata_ind.SRC_offset; clone_xprt->xp_rtaddr.len = pptr->unitdata_ind.SRC_length; + clone_xprt->xp_lcladdr.buf = (char *)&ud->ud_local; + /* * Copy the local transport address in the service_transport * handle at the address in the request. We will have only * the local IP address in options. */
*** 759,769 **** #define XIDHASH(xid) ((xid) % DRHASHSZ) #define DRHASH(dr) XIDHASH((dr)->dr_xid) #define REQTOXID(req) ((req)->rq_xprt->xp_xid) static int ndupreqs = 0; ! int maxdupreqs = MAXDUPREQS; static kmutex_t dupreq_lock; static struct dupreq *drhashtbl[DRHASHSZ]; static int drhashstat[DRHASHSZ]; static void unhash(struct dupreq *); --- 766,776 ---- #define XIDHASH(xid) ((xid) % DRHASHSZ) #define DRHASH(dr) XIDHASH((dr)->dr_xid) #define REQTOXID(req) ((req)->rq_xprt->xp_xid) static int ndupreqs = 0; ! volatile int maxdupreqs = MAXDUPREQS; static kmutex_t dupreq_lock; static struct dupreq *drhashtbl[DRHASHSZ]; static int drhashstat[DRHASHSZ]; static void unhash(struct dupreq *);