diff --git a/tools/fakeroot/Makefile b/tools/fakeroot/Makefile
index 8c30ee71c3f6..e9daa4b6ad7b 100644
--- a/tools/fakeroot/Makefile
+++ b/tools/fakeroot/Makefile
@@ -5,14 +5,15 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=fakeroot
-PKG_VERSION:=1.24
-PKG_RELEASE:=2
+PKG_VERSION:=1.25.3
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
 PKG_SOURCE_URL:=http://deb.debian.org/debian/pool/main/f/fakeroot
-PKG_HASH:=2e045b3160370b8ab4d44d1f8d267e5d1d555f1bb522d650e7167b09477266ed
+PKG_HASH:=8e903683357f7f5bcc31b879fd743391ad47691d4be33d24a76be3b6c21e956c
 PKG_LICENSE:=GPL-3.0-or-later
 PKG_LICENSE_FILES:=COPYING
+PKG_FIXUP:=autoreconf
 
 include $(INCLUDE_DIR)/host-build.mk
 
diff --git a/tools/fakeroot/patches/000-relocatable.patch b/tools/fakeroot/patches/000-relocatable.patch
index 0408acfa2500..44897c5ab8c7 100644
--- a/tools/fakeroot/patches/000-relocatable.patch
+++ b/tools/fakeroot/patches/000-relocatable.patch
@@ -8,7 +8,7 @@
 -FAKEROOT_BINDIR=@bindir@
 +if [ -n "$STAGING_DIR_HOST" ]; then
 +    USEABSLIBPATH=1
-+    LIB=${STAGING_DIR_HOST}/lib/lib@fakeroot_transformed@@DLSUFFIX@
++    FAKEROOT_LIB=${STAGING_DIR_HOST}/lib/lib@fakeroot_transformed@@DLSUFFIX@
 +    FAKED=${STAGING_DIR_HOST}/bin/faked
 +    PATHS=
 +else
@@ -16,11 +16,11 @@
 +    FAKEROOT_BINDIR=@bindir@
  
 -USEABSLIBPATH=@LDPRELOADABS@
--LIB=lib@fakeroot_transformed@@DLSUFFIX@
+-FAKEROOT_LIB=lib@fakeroot_transformed@@DLSUFFIX@
 -PATHS=@libdir@:${FAKEROOT_PREFIX}/lib64/libfakeroot:${FAKEROOT_PREFIX}/lib32/libfakeroot
 -FAKED=${FAKEROOT_BINDIR}/@faked_transformed@
 +    USEABSLIBPATH=@LDPRELOADABS@
-+    LIB=lib@fakeroot_transformed@@DLSUFFIX@
++    FAKEROOT_LIB=lib@fakeroot_transformed@@DLSUFFIX@
 +    PATHS=@libdir@:${FAKEROOT_PREFIX}/lib64/libfakeroot:${FAKEROOT_PREFIX}/lib32/libfakeroot
 +    FAKED=${FAKEROOT_BINDIR}/@faked_transformed@
 +fi
diff --git a/tools/fakeroot/patches/100-portability.patch b/tools/fakeroot/patches/100-portability.patch
index 5713c9e3fe86..315a9e16bfce 100644
--- a/tools/fakeroot/patches/100-portability.patch
+++ b/tools/fakeroot/patches/100-portability.patch
@@ -1,9 +1,9 @@
 --- a/libfakeroot.c
 +++ b/libfakeroot.c
-@@ -110,8 +110,16 @@
- #define INT_NEXT_FSTATAT(a,b,c,d) NEXT_FSTATAT(_STAT_VER,a,b,c,d)
+@@ -112,8 +112,16 @@
  #define INT_SEND_STAT(a,b) SEND_STAT(a,b,_STAT_VER)
  #define INT_SEND_GET_XATTR(a,b) SEND_GET_XATTR(a,b,_STAT_VER)
+ #define INT_SEND_GET_STAT(a,b) SEND_GET_STAT(a,b)
 +
 +/* 10.10 uses id_t in getpriority/setpriority calls, so pretend
 +   id_t is used everywhere, just happens to be int on some OSes */
@@ -17,7 +17,7 @@
  #include <stdlib.h>
  #include <sys/ipc.h>
  #include <sys/msg.h>
-@@ -123,7 +131,6 @@
+@@ -125,7 +133,6 @@
  #include <unistd.h>
  #include <dirent.h>
  #include <errno.h>
@@ -25,7 +25,7 @@
  #ifdef HAVE_SYS_ACL_H
  #include <sys/acl.h>
  #endif /* HAVE_SYS_ACL_H */
-@@ -1894,7 +1901,7 @@ ssize_t fremovexattr(int fd, const char 
+@@ -1911,7 +1918,7 @@ ssize_t fremovexattr(int fd, const char
  }
  #endif /* HAVE_FREMOVEXATTR */
  
@@ -34,7 +34,7 @@
    if (fakeroot_disabled)
      return next_setpriority(which, who, prio);
    next_setpriority(which, who, prio);
-@@ -2426,3 +2433,19 @@ int sysinfo(int command, char *buf, long
+@@ -2520,3 +2527,19 @@ int sysinfo(int command, char *buf, long
      }
  }
  #endif
@@ -56,16 +56,16 @@
 +#endif
 --- a/wrapfunc.inp
 +++ b/wrapfunc.inp
-@@ -145,7 +145,7 @@ setfsgid;gid_t;(gid_t fsgid);(fsgid)
- #endif /* HAVE_SETFSGID */
+@@ -146,7 +146,7 @@ setfsgid;gid_t;(gid_t fsgid);(fsgid)
  initgroups;int;(const char *user, INITGROUPS_SECOND_ARG group);(user, group)
+ getgroups;int;(int size, gid_t list[]);(size, list)
  setgroups;int;(SETGROUPS_SIZE_TYPE size, const gid_t *list);(size, list)
 -setpriority;int;(int which, int who, int prio);(which, who, prio)
 +setpriority;int;(int which, id_t who, int prio);(which, who, prio)
  #ifdef HAVE_CAPSET
  capset;int;(cap_user_header_t hdrp, const cap_user_data_t datap);(hdrp, datap)
  #endif /* HAVE_CAPSET */
-@@ -197,7 +197,7 @@ fchownat;int;(int dir_fd, const char *pa
+@@ -198,7 +198,7 @@ fchownat;int;(int dir_fd, const char *pa
  mkdirat;int;(int dir_fd, const char *pathname, mode_t mode);(dir_fd, pathname, mode)
  #endif /* HAVE_MKDIRAT */
  #ifdef HAVE_OPENAT
@@ -112,17 +112,7 @@
          print "static __inline__ " ret " next_" name, argtype " {" > tmpffile;
 --- a/configure.ac
 +++ b/configure.ac
-@@ -110,6 +110,7 @@ for first in size_t int; do
- #include <sys/types.h>
- #endif
- #include <unistd.h>
-+#include <stdio.h>
- #ifdef HAVE_GRP_H
- #include <grp.h>
- #endif
---- a/configure
-+++ b/configure
-@@ -12847,6 +12847,7 @@ for first in size_t int; do
+@@ -146,6 +146,7 @@ for first in size_t int; do
  #include <sys/types.h>
  #endif
  #include <unistd.h>
diff --git a/tools/fakeroot/patches/200-disable-doc.patch b/tools/fakeroot/patches/200-disable-doc.patch
new file mode 100644
index 000000000000..29a3e39b2d21
--- /dev/null
+++ b/tools/fakeroot/patches/200-disable-doc.patch
@@ -0,0 +1,10 @@
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,6 +1,6 @@
+ AUTOMAKE_OPTIONS=foreign
+ ACLOCAL_AMFLAGS = -I build-aux
+-SUBDIRS=doc scripts test
++SUBDIRS=scripts test
+ 
+ noinst_LTLIBRARIES = libcommunicate.la libmacosx.la
+ libcommunicate_la_SOURCES = communicate.c
diff --git a/tools/fakeroot/patches/200-hide-dlsym-error.patch b/tools/fakeroot/patches/200-hide-dlsym-error.patch
deleted file mode 100644
index 3fd34c8778fa..000000000000
--- a/tools/fakeroot/patches/200-hide-dlsym-error.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Description: Hide error from dlsym()
- dlsym(), starting in glibc 2.24 actually reports errors. In our case,
- we try to get ACL functions which are not in the glibc. This causes
- failures in test suites, so hide those messages for non-debugging
- purposes for now. It also makes the build logs annoying to read.
-Author: Julian Andres Klode <juliank@ubuntu.com>
-Origin: vendor
-Bug-Debian: https://bugs.debian.org/830912
-Forwarded: no
-Last-Update: 2016-08-12
-
---- a/libfakeroot.c
-+++ b/libfakeroot.c
-@@ -256,10 +256,16 @@ void load_library_symbols(void){
-  /* clear dlerror() just in case dlsym() legitimately returns NULL */
-     msg = dlerror();
-     *(next_wrap[i].doit)=dlsym(get_libc(), next_wrap[i].name);
-+
-     if ( (msg = dlerror()) != NULL){
--      fprintf (stderr, "dlsym(%s): %s\n", next_wrap[i].name, msg);
--/*    abort ();*/
-+#ifdef LIBFAKEROOT_DEBUGGING
-+      if (fakeroot_debug) {
-+        fprintf (stderr, "dlsym(%s): %s\n", next_wrap[i].name, msg);
-+/*      abort ();*/
-+      }
-+#endif
-     }
-+
-   }
- }
- 
