summaryrefslogtreecommitdiffstats
path: root/src/fw.c
diff options
context:
space:
mode:
authorGravatar Lee Cewd 2013-09-08 20:49:42 +0800
committerGravatar Stefan Richter 2015-04-28 22:09:12 +0200
commit242ed444d3803c8e2b35bec07ac1b448caddb541 (patch)
tree0a70a16f06e916f7d49d442490207deb53e04f72 /src/fw.c
parentSave and restore errno in raw1394_new_handle{,_on_port} for legacy applications (diff)
Fix memory leak in response handler
A temporarily allocated buffer which is used to pass data from libraw1394's event loop to the Address Range Mapping callback was never freed. This was pointed out by the following valgrind trace: 3067120 (3066560 direct, 560 indirect) bytes in 10952 blocks are definitely lost in loss record 36 of 36 at 0x4029F6F : malloc () by 0x405B1B5 : ??? (in usr/lib/libraw1394.so.11.0.1) by 0x405B492 : ??? (in usr/lib/libraw1394.so.11.0.1) by 0x405BF24 : fw_loop_iterate (in usr/lib/libraw1394.so.11.0.1) by 0x405C197 : ??? (in usr/lib/libraw1394.so.11.0.1) by 0x405D6F8 : fw_write (in usr/lib/libraw1394.so.11.0.1) by 0x405A292 : raw1394_write (in usr/lib/libraw1394.so.11.0.1) by 0x805A0F2 : main (main.cpp:121) Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'src/fw.c')
-rw-r--r--src/fw.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/fw.c b/src/fw.c
index 7d64250..7e9bd52 100644
--- a/src/fw.c
+++ b/src/fw.c
@@ -793,7 +793,7 @@ handle_arm_request(raw1394handle_t handle, struct address_closure *ac,
struct fw_cdev_send_response response;
arm_options_t type;
size_t in_length;
- int pos;
+ int pos, retval;
pos = offset - allocation->offset;
response.handle = kernel_handle;
@@ -898,8 +898,10 @@ handle_arm_request(raw1394handle_t handle, struct address_closure *ac,
rrb->response.buffer = rrb->data + in_length;
memcpy(rrb->response.buffer, allocation->data + pos, response.length);
- return fwhandle->arm_tag_handler(handle, allocation->tag, type,
- length, &rrb->request_response);
+ retval = fwhandle->arm_tag_handler(handle, allocation->tag, type,
+ length, &rrb->request_response);
+ free(rrb);
+ return retval;
}
int
8 01:21:15 +0000'>2001-02-28testlibraw gets installed now.Gravatar aeb 5-3/+42 2001-02-27Let received iso header be big endian, to be consistent.Gravatar aeb 1-1/+2 2001-02-05Add libraw1394 autoconf macro (not yet complete).Gravatar aeb 5-1/+183 2001-01-31Put 'extern "C"' for C++ back in.Gravatar aeb 1-1/+1 2001-01-27Adapted testlibraw to new style error handling.Gravatar aeb 1-17/+18 2001-01-19Fix building errors.c.Gravatar aeb 2-0/+2 2001-01-19First implementation of new error reporting API.Gravatar aeb 7-28/+134 2001-01-04Fix misplaced device file in Debian installation.Gravatar aeb 3-3/+10 2000-12-12Debian scripts use makedev (>=2.3.1-49) in postinst by default now.Gravatar aeb 7-30/+104 2000-11-25Fix postinst ldconfig.Gravatar aeb 2-11/+11 2000-11-25Add some information about return values.Gravatar aeb 1-3/+29 2000-11-24Bump up version numbers for release.Gravatar aeb 2-3/+11 2000-11-24Added libraw1394.postinst.in to list of distributed files.Gravatar aeb 3-3/+35 2000-11-23Add ldconfig in deb postinst for Debian policy conformance.Gravatar aeb 2-2/+17 2000-11-23Removed acconfig.h, which wasn't needed for some time.Gravatar aeb 1-13/+0 2000-11-22Added ieee1394.h header.Gravatar aeb 3-1/+38 2000-09-13Fix raw1394_start_iso_write() which uses wrong variable.Gravatar aeb 1-1/+1 2000-09-10Work around compiler warnings for int/ptr casts.Gravatar aeb 6-10/+20 2000-09-10Added control files for Debian packages.Gravatar aeb 6-8/+106 2000-09-01Added missing prototypes for iso send functions.Gravatar aeb 1-0/+7 2000-08-08Added raw1394_get_irm_id().Gravatar aeb 7-7/+39 2000-08-06Added support for isochronous sending.Gravatar aeb 3-0/+35 2000-07-05Added raw1394_reset_bus() call.Gravatar aeb 4-0/+23 2000-06-22- Set library version info in configure.in, use in src/Makefile.am.Gravatar aeb 4-2/+16 2000-06-15Update libtool version number.Gravatar aeb 2-2/+2 2000-06-14Added copyright headers.Gravatar aeb 6-0/+54 2000-06-11Added explicit AC_PROG_INSTALL call.Gravatar aeb 1-0/+1 2000-06-09Fix size of error field.Gravatar aeb 1-2/+2 2000-06-02Modified support for 32/64 bit environments, control struct fields have fixed...Gravatar aeb 7-43/+28 2000-05-28Added support for environments with 64 bit kernel and 32 bit userland.Gravatar aeb 8-7/+45 2000-04-27Fixed missing setting of ext code in raw1394_start_lock()Gravatar aeb 1-0/+1 2000-04-15Fixed lock transaction to actually return response value.Gravatar aeb 3-5/+11 2000-04-12Add userdata functions as news.Gravatar aeb 1-0/+4 2000-04-05Add userdata functions.Gravatar aeb 3-0/+18 2000-03-18Bump version number to 0.6.Gravatar aeb 3-5/+6 2000-03-18Mention byte order change.Gravatar aeb 1-0/+2 2000-03-18Mention SourceForge home.Gravatar aeb 1-1/+5