Index: head/net/libutp/Makefile =================================================================== --- head/net/libutp/Makefile (revision 377673) +++ head/net/libutp/Makefile (revision 377674) @@ -1,26 +1,39 @@ # Created by: Mikhail Teterin # $FreeBSD$ PORTNAME= bittorrent-libutp PORTVERSION= 0.20130514 +PORTREVISION= 1 CATEGORIES= net devel MAINTAINER= mi@aldan.algebra.com -COMMENT= The uTorrent Transport Protocol library +COMMENT= The uTorrent Transport Protocol library and sample utilities LICENSE= MIT USE_GITHUB= yes GH_ACCOUNT= ${PORTNAME:C/-.*//} GH_PROJECT= ${PORTNAME:C/.*-//} GH_TAGNAME= ${GH_COMMIT} GH_COMMIT= 7c4f19a USES= dos2unix uidfix MAKEFILE= ${FILESDIR}/BSDmakefile USE_LDCONFIG= yes pre-install: @${MKDIR} ${STAGEDIR}${PREFIX}/include/libutp + +post-build: + ${MAKE} -f ${FILESDIR}/BSDmakefile.utils -C ${WRKSRC}/utp_file PROG_CXX=utp_send + ${MAKE} -f ${FILESDIR}/BSDmakefile.utils -C ${WRKSRC}/utp_file PROG_CXX=utp_recv + ${MAKE} -f ${FILESDIR}/BSDmakefile.utils -C ${WRKSRC}/utp_test PROG_CXX=utp_test + +post-install: + ${INSTALL_PROGRAM} \ + ${WRKSRC}/utp_file/utp_send \ + ${WRKSRC}/utp_file/utp_recv \ + ${WRKSRC}/utp_test/utp_test \ + ${STAGEDIR}${PREFIX}/bin/ .include Index: head/net/libutp/files/BSDmakefile =================================================================== --- head/net/libutp/files/BSDmakefile (revision 377673) +++ head/net/libutp/files/BSDmakefile (revision 377674) @@ -1,14 +1,16 @@ LIB= utp SHLIB_MAJOR= 0 SRCS= utp.cpp utp_utils.cpp NO_PROFILE= yes CXXFLAGS+= -fno-exceptions -fno-rtti CXXFLAGS+= -I${.CURDIR} -I${.CURDIR}/utp_config_lib -DPOSIX CXXFLAGS+= -Wall INCLUDEDIR= ${PREFIX}/include/libutp LIBDIR= ${PREFIX}/lib -INCS= utp.h utp_utils.h utypes.h +INCS= utp.h utp_utils.h utypes.h utp_file/udp.h + +WARNS= 5 .include Index: head/net/libutp/files/BSDmakefile.utils =================================================================== --- head/net/libutp/files/BSDmakefile.utils (nonexistent) +++ head/net/libutp/files/BSDmakefile.utils (revision 377674) @@ -0,0 +1,10 @@ +# PROG_CXX defined on command-line + +SRCS= ${PROG_CXX}.cpp +NO_MAN= ha-ha +LDADD= -L.. -lutp +CXXFLAGS+= -I.. -DPOSIX + +WARNS= 3 + +.include Property changes on: head/net/libutp/files/BSDmakefile.utils ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/net/libutp/files/patch-CVE-2012-6129 =================================================================== --- head/net/libutp/files/patch-CVE-2012-6129 (nonexistent) +++ head/net/libutp/files/patch-CVE-2012-6129 (revision 377674) @@ -0,0 +1,52 @@ +Index: utp.cpp +=================================================================== +--- utp.cpp (revision 13645) ++++ utp.cpp (revision 13646) +@@ -1487,6 +1487,8 @@ size_t UTPSocket::selective_ack_bytes(uint base, c + return acked_bytes; + } + ++enum { MAX_EACK = 128 }; ++ + void UTPSocket::selective_ack(uint base, const byte *mask, byte len) + { + if (cur_window_packets == 0) return; +@@ -1499,7 +1501,7 @@ void UTPSocket::selective_ack(uint base, const byt + // resends is a stack of sequence numbers we need to resend. Since we + // iterate in reverse over the acked packets, at the end, the top packets + // are the ones we want to resend +- int resends[32]; ++ int resends[MAX_EACK]; + int nr = 0; + + LOG_UTPV("0x%08x: Got EACK [%032b] base:%u", this, *(uint32*)mask, base); +@@ -1572,6 +1574,12 @@ void UTPSocket::selective_ack(uint base, const byt + if (((v - fast_resend_seq_nr) & ACK_NR_MASK) <= OUTGOING_BUFFER_MAX_SIZE && + count >= DUPLICATE_ACKS_BEFORE_RESEND && + duplicate_ack < DUPLICATE_ACKS_BEFORE_RESEND) { ++ // resends is a stack, and we're mostly interested in the top of it ++ // if we're full, just throw away the lower half ++ if (nr >= MAX_EACK - 2) { ++ memmove(resends, &resends[MAX_EACK/2], MAX_EACK/2 * sizeof(resends[0])); ++ nr -= MAX_EACK / 2; ++ } + resends[nr++] = v; + LOG_UTPV("0x%08x: no ack for %u", this, v); + } else { +@@ -1580,13 +1588,12 @@ void UTPSocket::selective_ack(uint base, const byt + } + } while (--bits >= -1); + +- if (((base - 1 - fast_resend_seq_nr) & ACK_NR_MASK) < 256 && +- count >= DUPLICATE_ACKS_BEFORE_RESEND && +- duplicate_ack < DUPLICATE_ACKS_BEFORE_RESEND) { ++ if (((base - 1 - fast_resend_seq_nr) & ACK_NR_MASK) <= OUTGOING_BUFFER_MAX_SIZE && ++ count >= DUPLICATE_ACKS_BEFORE_RESEND) { + // if we get enough duplicate acks to start + // resending, the first packet we should resend + // is base-1 +- resends[nr++] = base - 1; ++ resends[nr++] = (base - 1) & ACK_NR_MASK; + } else { + LOG_UTPV("0x%08x: not resending %u count:%d dup_ack:%u fast_resend_seq_nr:%u", + this, base - 1, count, duplicate_ack, fast_resend_seq_nr); Property changes on: head/net/libutp/files/patch-CVE-2012-6129 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/net/libutp/pkg-descr =================================================================== --- head/net/libutp/pkg-descr (revision 377673) +++ head/net/libutp/pkg-descr (revision 377674) @@ -1,12 +1,12 @@ # libutp - The uTorrent Transport Protocol library. Copyright (c) 2010 BitTorrent, Inc. uTP provides provides reliable, ordered delivery while maintaining minimum extra delay. It is implemented on top of UDP to be cross-platform and functional today. As a result, uTP is the primary transport for uTorrent peer-to-peer connections. uTP is written in C++, but the external interface is strictly C (ANSI C89). -WWW: https://github.com/bittorrent/libutp +WWW: https://github.com/bittorrent/libutp Index: head/net/libutp/pkg-plist =================================================================== --- head/net/libutp/pkg-plist (revision 377673) +++ head/net/libutp/pkg-plist (revision 377674) @@ -1,6 +1,10 @@ +bin/utp_send +bin/utp_recv +bin/utp_test lib/libutp.so.0 lib/libutp.so lib/libutp.a +include/libutp/udp.h include/libutp/utp.h include/libutp/utp_utils.h include/libutp/utypes.h