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,10 +21,12 @@
/*
* 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,20 +101,23 @@
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. */
+ 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,10 +327,12 @@
*/
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,11 +766,11 @@
#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;
+volatile int maxdupreqs = MAXDUPREQS;
static kmutex_t dupreq_lock;
static struct dupreq *drhashtbl[DRHASHSZ];
static int drhashstat[DRHASHSZ];
static void unhash(struct dupreq *);