[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: SPU upload of links2 (was Re: Fwd: Bug#668227: links2: security bugs in links)



Hi,

Cyril Brulebois wrote:
> Axel Beckert <abe@debian.org> (11/04/2012):
> > I'd have sent that anyway, just wanted to ask beforehand. Will let you
> > know when I have the package ready.
> 
> (having look quickly at the bug report now:) please make sure to fix the
> package in unstable beforehands.

Done now, despite not by the patch upstream attached but by their new
upstream release.

Cyril Brulebois wrote:
> Axel Beckert <abe@debian.org> (11/04/2012):
> > Nico Golde wrote:
> > > Please upload these fixes to stable-proposed-updates instead.
> > 
> > I guess that's ok with the SRM.
> 
> We can't tell until we see a debdiff against the package in stable.

Attached. I'm though still waiting for a CVE ID. Pinged the security
team again an hour ago or so.

		Regards, Axel
-- 
 ,''`.  |  Axel Beckert <abe@debian.org>, http://people.debian.org/~abe/
: :' :  |  Debian Developer, ftp.ch.debian.org Admin
`. `'   |  1024D: F067 EA27 26B9 C3FC 1486  202E C09E 1D89 9593 0EDE
  `-    |  4096R: 2517 B724 C5F6 CA99 5329  6E61 2FF9 CD59 6126 16B5
diff -Nru links2-2.3~pre1/debian/changelog links2-2.3~pre1/debian/changelog
--- links2-2.3~pre1/debian/changelog	2010-07-09 17:08:57.000000000 +0200
+++ links2-2.3~pre1/debian/changelog	2012-04-24 17:57:23.000000000 +0200
@@ -1,3 +1,9 @@
+links2 (2.3~pre1-1+squeeze1) stable-proposed-updates; urgency=low
+
+  * Fix several security issues reported by upstream (Closes: #668227)
+
+ -- Axel Beckert <abe@debian.org>  Tue, 24 Apr 2012 17:57:12 +0200
+
 links2 (2.3~pre1-1) unstable; urgency=low
 
   [Gürkan Sengün]
diff -Nru links2-2.3~pre1/debian/patches/security-fixes-668227.diff links2-2.3~pre1/debian/patches/security-fixes-668227.diff
--- links2-2.3~pre1/debian/patches/security-fixes-668227.diff	1970-01-01 01:00:00.000000000 +0100
+++ links2-2.3~pre1/debian/patches/security-fixes-668227.diff	2012-04-24 17:46:04.000000000 +0200
@@ -0,0 +1,163 @@
+This patch fixes:
+
+Buffer overflow when pasting too long text from clipboard to dialog boxes
+	(not remotely exploitable)
+A write out of allocated memory in the graphics rendeder (potentionally
+	exploitable)
+An infinite loop when parsing invalid usemap specification in text and
+	graphics mode (can cause browser lockup, but not otherwise exploitable)
+Accesses out of memory in the xbm decoder (potentionally exploitable)
+
+---
+ bfu.c  |    3 ++-
+ dip.c  |    3 ++-
+ html.c |    6 +++++-
+ xbm.c  |   20 ++++++++++----------
+ 4 files changed, 19 insertions(+), 13 deletions(-)
+
+Index: links-2.3pre1/bfu.c
+===================================================================
+--- links-2.3pre1.orig/bfu.c	2012-04-09 23:39:47.000000000 +0200
++++ links-2.3pre1/bfu.c	2012-04-09 23:39:56.000000000 +0200
+@@ -1382,7 +1382,8 @@ void dialog_func(struct window *win, str
+ clipbd_paste:
+ 					clipboard = get_clipboard_text(term);
+ 					if (clipboard) {
+-						if (strlen(di->cdata) < di->item->dlen - strlen(clipboard)) {
++						if (strlen(di->cdata) + strlen(clipboard) < (size_t)di->item->dlen ||
++						    strlen(di->cdata) + strlen(clipboard) < strlen(di->cdata)) {
+ 							memmove(di->cdata + di->cpos + strlen(clipboard), di->cdata + di->cpos, strlen(di->cdata) - di->cpos + 1);
+ 							memcpy(&di->cdata[di->cpos], clipboard, strlen(clipboard));
+ 							di->cpos += strlen(clipboard);
+Index: links-2.3pre1/dip.c
+===================================================================
+--- links-2.3pre1.orig/dip.c	2012-04-09 23:39:47.000000000 +0200
++++ links-2.3pre1/dip.c	2012-04-09 23:39:56.000000000 +0200
+@@ -1901,6 +1901,7 @@ int g_wrap_text(struct wrap_struct *w)
+ 	while (*w->text) {
+ 		int u;
+ 		int s;
++		unsigned char *l_text = w->text;
+ 		if (*w->text == ' ') w->last_wrap = w->text,
+ 				     w->last_wrap_obj = w->obj;
+ 		GET_UTF_8(w->text, u);
+@@ -1913,7 +1914,7 @@ int g_wrap_text(struct wrap_struct *w)
+ 			if (u != 0xad || *w->text == ' ') continue;
+ 			s = g_char_width(w->style, '-');
+ 			if (w->pos + s <= w->width || (!w->last_wrap && !w->last_wrap_obj)) {
+-				w->last_wrap = w->text;
++				w->last_wrap = l_text;
+ 				w->last_wrap_obj = w->obj;
+ 				continue;
+ 			}
+Index: links-2.3pre1/html.c
+===================================================================
+--- links-2.3pre1.orig/html.c	2012-04-09 23:39:47.000000000 +0200
++++ links-2.3pre1/html.c	2012-04-09 23:39:56.000000000 +0200
+@@ -2920,6 +2920,7 @@ int get_image_map(unsigned char *head, u
+ 		lblen = 0;
+ 		se3:
+ 		ss = s;
++		se4:
+ 		while (ss < eof && *ss != '<') ss++;
+ 		if (ss >= eof) {
+ 			mem_free(label);
+@@ -2933,7 +2934,10 @@ int get_image_map(unsigned char *head, u
+ 			s = skip_comment(s, eof);
+ 			goto se3;
+ 		}
+-		if (parse_element(s, eof, NULL, NULL, NULL, &ss)) goto se3;
++		if (parse_element(s, eof, NULL, NULL, NULL, &ss)) {
++			ss = s + 1;
++			goto se4;
++		}
+ 		if (!((namelen == 1 && !casecmp(name, "A", 1)) ||
+ 		      (namelen == 2 && !casecmp(name, "/A", 2)) ||
+ 		      (namelen == 3 && !casecmp(name, "MAP", 3)) ||
+Index: links-2.3pre1/xbm.c
+===================================================================
+--- links-2.3pre1.orig/xbm.c	2012-04-09 23:39:47.000000000 +0200
++++ links-2.3pre1/xbm.c	2012-04-09 23:39:56.000000000 +0200
+@@ -44,7 +44,7 @@ struct xbm_decoder{
+ extern int get_foreground(int rgb);
+ 
+ unsigned char *my_memmem(unsigned char *, int, unsigned char *, int);
+-void xbm_decode(struct cached_image *, unsigned char *, int);
++int xbm_decode(struct cached_image *, unsigned char *, int);
+ 
+ 
+ unsigned char *my_memmem(unsigned char *h, int hl, unsigned char *n, int nl)
+@@ -138,7 +138,7 @@ static inline void put_eight(struct cach
+ 
+ /* opravdovy dekoder xbm, data jsou bez komentaru */
+ /* length is always !=NULL */
+-void xbm_decode(struct cached_image *cimg, unsigned char *data, int length)
++int xbm_decode(struct cached_image *cimg, unsigned char *data, int length)
+ {
+ 	struct xbm_decoder *deco=(struct xbm_decoder *)cimg->decoder;
+ 	/* okurky v decu ;-) */
+@@ -146,13 +146,13 @@ void xbm_decode(struct cached_image *cim
+ 	int must_return=0;
+ 
+ restart_again:
+-	if (must_return&&!length)return;
++	if (must_return&&!length)return 0;
+ 	must_return=0;
+ 	a=min(length,XBM_BUFFER_LEN-deco->buffer_pos);
+ 	memcpy(deco->buffer+deco->buffer_pos,data,a);
+ 	length-=a;
+ 	deco->buffer_pos+=a;
+-	if (!deco->buffer_pos)return; 	/* z toho nic plodnyho nevznikne */
++	if (!deco->buffer_pos)return 0; 	/* z toho nic plodnyho nevznikne */
+ 	data+=a;
+ 	if (!deco->in_data_block&&deco->partnum)
+ 	{
+@@ -220,7 +220,7 @@ restart_again:
+ 			cimg->green_gamma=display_green_gamma;
+ 			cimg->blue_gamma=display_blue_gamma;
+ 			cimg->strip_optimized=0;
+-			if (header_dimensions_known(cimg)) {img_end(cimg);return;}
++			if (header_dimensions_known(cimg)) {img_end(cimg);return 1;}
+ 			
+ 			deco->in_data_block=1;
+ 			p++;
+@@ -239,7 +239,7 @@ restart_again:
+ 		deco->buffer_pos=a;
+ 		if (deco->partnum)must_return=1;
+ 		else put_eight(cimg,(b==16&&d>2)||(b==10&&deco->actual_eight>255)?16:8);
+-		if (deco->image_pos>=deco->pixels) {img_end(cimg);return;}
++		if (deco->image_pos>=deco->pixels) {img_end(cimg);return 1;}
+ 		goto restart_again;
+ 		
+ 	}
+@@ -261,9 +261,9 @@ cycle_again:
+ 			unsigned char *p;
+ 			p=memchr(data,'/',length);
+ 			if (!p){xbm_decode(cimg, data, length);return;}
+-			xbm_decode(cimg, data, p-data);
+-			data=p+1;	/* preskocim lomitko */
++			if (xbm_decode(cimg, data, p-data)) return;
+ 			length-=p-data+1;
++			data=p+1;	/* preskocim lomitko */
+ 			deco->state=1;
+ 			goto cycle_again;
+ 		}
+@@ -271,7 +271,7 @@ cycle_again:
+ 		case 1: /* za 1. lomitkem */
+ 		{
+ 			if (*data=='*'){deco->state=2;data++;length--;goto cycle_again;}	/* zacal komentar */
+-			xbm_decode(cimg, "/", 1);
++			if (xbm_decode(cimg, "/", 1)) return;
+ 			deco->state=0;	/* to nebyl komentar */
+ 			goto cycle_again;
+ 		}
+@@ -281,8 +281,8 @@ cycle_again:
+ 			unsigned char *p;
+ 			p=memchr(data,'*',length);
+ 			if (!p)return;	/* furt komentar */
+-			data=p+1;	/* preskocim hvezdicku */
+ 			length-=p-data+1;
++			data=p+1;	/* preskocim hvezdicku */
+ 			deco->state=3;
+ 			goto cycle_again;
+ 		}
diff -Nru links2-2.3~pre1/debian/patches/series links2-2.3~pre1/debian/patches/series
--- links2-2.3~pre1/debian/patches/series	2010-07-08 18:31:37.000000000 +0200
+++ links2-2.3~pre1/debian/patches/series	2012-04-24 17:51:57.000000000 +0200
@@ -1,3 +1,3 @@
 patches-as-of-link2-2.2-1.diff
 verify-ssl-certs-510417.diff
-
+security-fixes-668227.diff

Attachment: signature.asc
Description: Digital signature


Reply to: