[Glibc-bsd-commits] r2915 - in trunk/kfreebsd-8/debian: . patches
Petr Salinger
ps-guest at alioth.debian.org
Fri Jan 8 14:34:08 UTC 2010
Author: ps-guest
Date: 2010-01-08 14:34:02 +0000 (Fri, 08 Jan 2010)
New Revision: 2915
Added:
trunk/kfreebsd-8/debian/patches/000_mcinit.diff
trunk/kfreebsd-8/debian/patches/000_multicast.diff
trunk/kfreebsd-8/debian/patches/000_nfsreconnect.diff
trunk/kfreebsd-8/debian/patches/000_sctp.diff
trunk/kfreebsd-8/debian/patches/000_zfs.diff
trunk/kfreebsd-8/debian/patches/000_zfsmac.diff
trunk/kfreebsd-8/debian/patches/000_zfsvaccess.diff
Modified:
trunk/kfreebsd-8/debian/changelog
trunk/kfreebsd-8/debian/patches/000_rename.diff
trunk/kfreebsd-8/debian/patches/series
Log:
FreeBSD-SA-10:03.zfs and FreeBSD-EN-10:01.freebsd
Modified: trunk/kfreebsd-8/debian/changelog
===================================================================
--- trunk/kfreebsd-8/debian/changelog 2010-01-08 14:20:59 UTC (rev 2914)
+++ trunk/kfreebsd-8/debian/changelog 2010-01-08 14:34:02 UTC (rev 2915)
@@ -1,3 +1,21 @@
+kfreebsd-8 (8.0-2) unstable; urgency=low
+
+ [ Petr Salinger ]
+ * Fix ZFS ZIL playback with insecure permissions
+ (FreeBSD-SA-10:03.zfs)
+ - 000_zfs.diff
+ * Fix various stability and performance problems
+ (FreeBSD-EN-10:01.freebsd)
+ - 000_mcinit.diff
+ - 000_multicast.diff
+ - 000_nfsreconnect.diff
+ - 000_rename.diff (already included)
+ - 000_sctp.diff
+ - 000_zfsmac.diff
+ - 000_zfsvaccess.diff
+
+ -- Aurelien Jarno <aurel32 at debian.org> Thu, 26 Nov 2009 04:04:33 +0100
+
kfreebsd-8 (8.0-1) unstable; urgency=low
[ Petr Salinger ]
Added: trunk/kfreebsd-8/debian/patches/000_mcinit.diff
===================================================================
--- trunk/kfreebsd-8/debian/patches/000_mcinit.diff (rev 0)
+++ trunk/kfreebsd-8/debian/patches/000_mcinit.diff 2010-01-08 14:34:02 UTC (rev 2915)
@@ -0,0 +1,18 @@
+--- a/sys/netinet/ip_mroute.c (revision 201431)
++++ b/sys/netinet/ip_mroute.c (working copy)
+@@ -1384,6 +1384,15 @@ fail:
+ rt->mfc_rp.s_addr = INADDR_ANY;
+ rt->mfc_bw_meter = NULL;
+
++ /* initialize pkt counters per src-grp */
++ rt->mfc_pkt_cnt = 0;
++ rt->mfc_byte_cnt = 0;
++ rt->mfc_wrong_if = 0;
++ timevalclear(&rt->mfc_last_assert);
++
++ TAILQ_INIT(&rt->mfc_stall);
++ rt->mfc_nstall = 0;
++
+ /* link into table */
+ LIST_INSERT_HEAD(&mfchashtbl[hash], rt, mfc_hash);
+ TAILQ_INSERT_HEAD(&rt->mfc_stall, rte, rte_link);
Added: trunk/kfreebsd-8/debian/patches/000_multicast.diff
===================================================================
--- trunk/kfreebsd-8/debian/patches/000_multicast.diff (rev 0)
+++ trunk/kfreebsd-8/debian/patches/000_multicast.diff 2010-01-08 14:34:02 UTC (rev 2915)
@@ -0,0 +1,96 @@
+--- a/sys/netinet/raw_ip.c (revision 200583)
++++ b/sys/netinet/raw_ip.c (working copy)
+@@ -343,17 +343,35 @@ rip_input(struct mbuf *m, int off)
+ */
+ if (inp->inp_moptions != NULL &&
+ IN_MULTICAST(ntohl(ip->ip_dst.s_addr))) {
+- struct sockaddr_in group;
++ /*
++ * If the incoming datagram is for IGMP, allow it
++ * through unconditionally to the raw socket.
++ *
++ * In the case of IGMPv2, we may not have explicitly
++ * joined the group, and may have set IFF_ALLMULTI
++ * on the interface. imo_multi_filter() may discard
++ * control traffic we actually need to see.
++ *
++ * Userland multicast routing daemons should continue
++ * filter the control traffic appropriately.
++ */
+ int blocked;
+
+- bzero(&group, sizeof(struct sockaddr_in));
+- group.sin_len = sizeof(struct sockaddr_in);
+- group.sin_family = AF_INET;
+- group.sin_addr = ip->ip_dst;
++ blocked = MCAST_PASS;
++ if (proto != IPPROTO_IGMP) {
++ struct sockaddr_in group;
+
+- blocked = imo_multi_filter(inp->inp_moptions, ifp,
+- (struct sockaddr *)&group,
+- (struct sockaddr *)&ripsrc);
++ bzero(&group, sizeof(struct sockaddr_in));
++ group.sin_len = sizeof(struct sockaddr_in);
++ group.sin_family = AF_INET;
++ group.sin_addr = ip->ip_dst;
++
++ blocked = imo_multi_filter(inp->inp_moptions,
++ ifp,
++ (struct sockaddr *)&group,
++ (struct sockaddr *)&ripsrc);
++ }
++
+ if (blocked != MCAST_PASS) {
+ IPSTAT_INC(ips_notmember);
+ continue;
+--- a/sys/netinet6/raw_ip6.c (revision 200583)
++++ b/sys/netinet6/raw_ip6.c (working copy)
+@@ -213,17 +213,39 @@ rip6_input(struct mbuf **mp, int *offp, int proto)
+ */
+ if (in6p->in6p_moptions &&
+ IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) {
+- struct sockaddr_in6 mcaddr;
++ /*
++ * If the incoming datagram is for MLD, allow it
++ * through unconditionally to the raw socket.
++ *
++ * Use the M_RTALERT_MLD flag to check for MLD
++ * traffic without having to inspect the mbuf chain
++ * more deeply, as all MLDv1/v2 host messages MUST
++ * contain the Router Alert option.
++ *
++ * In the case of MLDv1, we may not have explicitly
++ * joined the group, and may have set IFF_ALLMULTI
++ * on the interface. im6o_mc_filter() may discard
++ * control traffic we actually need to see.
++ *
++ * Userland multicast routing daemons should continue
++ * filter the control traffic appropriately.
++ */
+ int blocked;
+
+- bzero(&mcaddr, sizeof(struct sockaddr_in6));
+- mcaddr.sin6_len = sizeof(struct sockaddr_in6);
+- mcaddr.sin6_family = AF_INET6;
+- mcaddr.sin6_addr = ip6->ip6_dst;
++ blocked = MCAST_PASS;
++ if ((m->m_flags & M_RTALERT_MLD) == 0) {
++ struct sockaddr_in6 mcaddr;
+
+- blocked = im6o_mc_filter(in6p->in6p_moptions, ifp,
+- (struct sockaddr *)&mcaddr,
+- (struct sockaddr *)&fromsa);
++ bzero(&mcaddr, sizeof(struct sockaddr_in6));
++ mcaddr.sin6_len = sizeof(struct sockaddr_in6);
++ mcaddr.sin6_family = AF_INET6;
++ mcaddr.sin6_addr = ip6->ip6_dst;
++
++ blocked = im6o_mc_filter(in6p->in6p_moptions,
++ ifp,
++ (struct sockaddr *)&mcaddr,
++ (struct sockaddr *)&fromsa);
++ }
+ if (blocked != MCAST_PASS) {
+ IP6STAT_INC(ip6s_notmember);
+ continue;
Added: trunk/kfreebsd-8/debian/patches/000_nfsreconnect.diff
===================================================================
--- trunk/kfreebsd-8/debian/patches/000_nfsreconnect.diff (rev 0)
+++ trunk/kfreebsd-8/debian/patches/000_nfsreconnect.diff 2010-01-08 14:34:02 UTC (rev 2915)
@@ -0,0 +1,25 @@
+--- a/sys/rpc/clnt_vc.c (revision 200583)
++++ b/sys/rpc/clnt_vc.c (working copy)
+@@ -413,6 +413,22 @@ call_again:
+
+ cr->cr_xid = xid;
+ mtx_lock(&ct->ct_lock);
++ /*
++ * Check to see if the other end has already started to close down
++ * the connection. The upcall will have set ct_error.re_status
++ * to RPC_CANTRECV if this is the case.
++ * If the other end starts to close down the connection after this
++ * point, it will be detected later when cr_error is checked,
++ * since the request is in the ct_pending queue.
++ */
++ if (ct->ct_error.re_status == RPC_CANTRECV) {
++ if (errp != &ct->ct_error) {
++ errp->re_errno = ct->ct_error.re_errno;
++ errp->re_status = RPC_CANTRECV;
++ }
++ stat = RPC_CANTRECV;
++ goto out;
++ }
+ TAILQ_INSERT_TAIL(&ct->ct_pending, cr, cr_link);
+ mtx_unlock(&ct->ct_lock);
+
Modified: trunk/kfreebsd-8/debian/patches/000_rename.diff
===================================================================
--- trunk/kfreebsd-8/debian/patches/000_rename.diff 2010-01-08 14:20:59 UTC (rev 2914)
+++ trunk/kfreebsd-8/debian/patches/000_rename.diff 2010-01-08 14:34:02 UTC (rev 2915)
@@ -1,4 +1,6 @@
+Added into FreeBSD-EN-10:01.freebsd
+
http://lists.freebsd.org/pipermail/svn-src-all/2009-November/015448.html
Log:
Added: trunk/kfreebsd-8/debian/patches/000_sctp.diff
===================================================================
--- trunk/kfreebsd-8/debian/patches/000_sctp.diff (rev 0)
+++ trunk/kfreebsd-8/debian/patches/000_sctp.diff 2010-01-08 14:34:02 UTC (rev 2915)
@@ -0,0 +1,12 @@
+--- a/sys/netinet/sctp_input.c (revision 200583)
++++ b/sys/netinet/sctp_input.c (working copy)
+@@ -834,6 +834,9 @@ sctp_handle_shutdown(struct sctp_shutdown_chunk *c
+ return;
+ } else {
+ sctp_update_acked(stcb, cp, net, abort_flag);
++ if (*abort_flag) {
++ return;
++ }
+ }
+ if (asoc->control_pdapi) {
+ /*
Added: trunk/kfreebsd-8/debian/patches/000_zfs.diff
===================================================================
--- trunk/kfreebsd-8/debian/patches/000_zfs.diff (rev 0)
+++ trunk/kfreebsd-8/debian/patches/000_zfs.diff 2010-01-08 14:34:02 UTC (rev 2915)
@@ -0,0 +1,21 @@
+--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_replay.c (revision 200583)
++++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_replay.c (working copy)
+@@ -60,10 +60,14 @@ zfs_init_vattr(vattr_t *vap, uint64_t mask, uint64
+ {
+ VATTR_NULL(vap);
+ vap->va_mask = (uint_t)mask;
+- vap->va_type = IFTOVT(mode);
+- vap->va_mode = mode & MODEMASK;
+- vap->va_uid = (uid_t)(IS_EPHEMERAL(uid)) ? -1 : uid;
+- vap->va_gid = (gid_t)(IS_EPHEMERAL(gid)) ? -1 : gid;
++ if (mask & AT_TYPE)
++ vap->va_type = IFTOVT(mode);
++ if (mask & AT_MODE)
++ vap->va_mode = mode & MODEMASK;
++ if (mask & AT_UID)
++ vap->va_uid = (uid_t)(IS_EPHEMERAL(uid)) ? -1 : uid;
++ if (mask & AT_GID)
++ vap->va_gid = (gid_t)(IS_EPHEMERAL(gid)) ? -1 : gid;
+ vap->va_rdev = zfs_cmpldev(rdev);
+ vap->va_nodeid = nodeid;
+ }
Added: trunk/kfreebsd-8/debian/patches/000_zfsmac.diff
===================================================================
--- trunk/kfreebsd-8/debian/patches/000_zfsmac.diff (rev 0)
+++ trunk/kfreebsd-8/debian/patches/000_zfsmac.diff 2010-01-08 14:34:02 UTC (rev 2915)
@@ -0,0 +1,76 @@
+--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c (revision 200583)
++++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c (working copy)
+@@ -143,16 +143,19 @@ zfs_znode_cache_constructor(void *buf, void *arg,
+
+ POINTER_INVALIDATE(&zp->z_zfsvfs);
+ ASSERT(!POINTER_IS_VALID(zp->z_zfsvfs));
+- ASSERT(vfsp != NULL);
+
+- error = getnewvnode("zfs", vfsp, &zfs_vnodeops, &vp);
+- if (error != 0 && (kmflags & KM_NOSLEEP))
+- return (-1);
+- ASSERT(error == 0);
+- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+- zp->z_vnode = vp;
+- vp->v_data = (caddr_t)zp;
+- VN_LOCK_AREC(vp);
++ if (vfsp != NULL) {
++ error = getnewvnode("zfs", vfsp, &zfs_vnodeops, &vp);
++ if (error != 0 && (kmflags & KM_NOSLEEP))
++ return (-1);
++ ASSERT(error == 0);
++ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
++ zp->z_vnode = vp;
++ vp->v_data = (caddr_t)zp;
++ VN_LOCK_AREC(vp);
++ } else {
++ zp->z_vnode = NULL;
++ }
+
+ list_link_init(&zp->z_link_node);
+
+@@ -1435,7 +1438,7 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *
+ nvpair_t *elem;
+ int error;
+ znode_t *rootzp = NULL;
+- vnode_t *vp;
++ vnode_t vnode;
+ vattr_t vattr;
+ znode_t *zp;
+
+@@ -1504,13 +1507,13 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *
+ vattr.va_gid = crgetgid(cr);
+
+ rootzp = kmem_cache_alloc(znode_cache, KM_SLEEP);
+- zfs_znode_cache_constructor(rootzp, &zfsvfs, 0);
++ zfs_znode_cache_constructor(rootzp, NULL, 0);
+ rootzp->z_unlinked = 0;
+ rootzp->z_atime_dirty = 0;
+
+- vp = ZTOV(rootzp);
+- vp->v_type = VDIR;
+- VN_LOCK_ASHARE(vp);
++ vnode.v_type = VDIR;
++ vnode.v_data = rootzp;
++ rootzp->z_vnode = &vnode;
+
+ bzero(&zfsvfs, sizeof (zfsvfs_t));
+
+@@ -1539,16 +1542,10 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *
+ ASSERT(error == 0);
+ POINTER_INVALIDATE(&rootzp->z_zfsvfs);
+
+- VI_LOCK(vp);
+- ZTOV(rootzp)->v_data = NULL;
+- ZTOV(rootzp)->v_count = 0;
+- ZTOV(rootzp)->v_holdcnt = 0;
+- rootzp->z_vnode = NULL;
+- VOP_UNLOCK(vp, 0);
+- vdestroy(vp);
+ dmu_buf_rele(rootzp->z_dbuf, NULL);
+ rootzp->z_dbuf = NULL;
+ mutex_destroy(&zfsvfs.z_znodes_lock);
++ rootzp->z_vnode = NULL;
+ kmem_cache_free(znode_cache, rootzp);
+ }
+
Added: trunk/kfreebsd-8/debian/patches/000_zfsvaccess.diff
===================================================================
--- trunk/kfreebsd-8/debian/patches/000_zfsvaccess.diff (rev 0)
+++ trunk/kfreebsd-8/debian/patches/000_zfsvaccess.diff 2010-01-08 14:34:02 UTC (rev 2915)
@@ -0,0 +1,66 @@
+--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c (revision 200583)
++++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c (working copy)
+@@ -3981,21 +3981,33 @@ zfs_freebsd_access(ap)
+ struct thread *a_td;
+ } */ *ap;
+ {
++ accmode_t accmode;
++ int error = 0;
+
+ /*
+- * ZFS itself only knowns about VREAD, VWRITE and VEXEC, the rest
+- * we have to handle by calling vaccess().
++ * ZFS itself only knowns about VREAD, VWRITE, VEXEC and VAPPEND,
+ */
+- if ((ap->a_accmode & ~(VREAD|VWRITE|VEXEC)) != 0) {
+- vnode_t *vp = ap->a_vp;
+- znode_t *zp = VTOZ(vp);
+- znode_phys_t *zphys = zp->z_phys;
++ accmode = ap->a_accmode & (VREAD|VWRITE|VEXEC|VAPPEND);
++ if (accmode != 0)
++ error = zfs_access(ap->a_vp, accmode, 0, ap->a_cred, NULL);
+
+- return (vaccess(vp->v_type, zphys->zp_mode, zphys->zp_uid,
+- zphys->zp_gid, ap->a_accmode, ap->a_cred, NULL));
++ /*
++ * VADMIN has to be handled by vaccess().
++ */
++ if (error == 0) {
++ accmode = ap->a_accmode & ~(VREAD|VWRITE|VEXEC|VAPPEND);
++ if (accmode != 0) {
++ vnode_t *vp = ap->a_vp;
++ znode_t *zp = VTOZ(vp);
++ znode_phys_t *zphys = zp->z_phys;
++
++ error = vaccess(vp->v_type, zphys->zp_mode,
++ zphys->zp_uid, zphys->zp_gid, accmode, ap->a_cred,
++ NULL);
++ }
+ }
+
+- return (zfs_access(ap->a_vp, ap->a_accmode, 0, ap->a_cred, NULL));
++ return (error);
+ }
+
+ static int
+--- a/sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h (revision 200583)
++++ b/sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h (working copy)
+@@ -304,7 +304,6 @@ typedef struct xvattr {
+ * VOP_ACCESS flags
+ */
+ #define V_ACE_MASK 0x1 /* mask represents NFSv4 ACE permissions */
+-#define V_APPEND 0x2 /* want to do append only check */
+
+ /*
+ * Flags for vnode operations.
+--- a/sys/cddl/compat/opensolaris/sys/vnode.h (revision 200583)
++++ b/sys/cddl/compat/opensolaris/sys/vnode.h (working copy)
+@@ -57,6 +57,8 @@ typedef struct vop_vector vnodeops_t;
+
+ #define v_count v_usecount
+
++#define V_APPEND VAPPEND
++
+ static __inline int
+ vn_is_readonly(vnode_t *vp)
+ {
Modified: trunk/kfreebsd-8/debian/patches/series
===================================================================
--- trunk/kfreebsd-8/debian/patches/series 2010-01-08 14:20:59 UTC (rev 2914)
+++ trunk/kfreebsd-8/debian/patches/series 2010-01-08 14:34:02 UTC (rev 2915)
@@ -1,4 +1,11 @@
+000_mcinit.diff
+000_multicast.diff
+000_nfsreconnect.diff
000_rename.diff
+000_sctp.diff
+000_zfs.diff
+000_zfsmac.diff
+000_zfsvaccess.diff
001_misc.diff
003_glibc_dev_aicasm.diff
004_xargs.diff
More information about the Glibc-bsd-commits
mailing list