diff options
-rw-r--r-- | tapset/ChangeLog | 3 | ||||
-rw-r--r-- | tapset/socket.stp | 9 |
2 files changed, 11 insertions, 1 deletions
diff --git a/tapset/ChangeLog b/tapset/ChangeLog index b2592e1e..9e418e99 100644 --- a/tapset/ChangeLog +++ b/tapset/ChangeLog @@ -1,3 +1,6 @@ +2008-08-28 Zhaolei <zhaolei@cn.fujitsu.com> + * socket.stp: Make _get_sock_addr return correct address in kernel + before 2.6.16. 2008-08-04 Wenji Huang <wenji.huang@oracle.com> diff --git a/tapset/socket.stp b/tapset/socket.stp index 54a7c71f..3197a0e2 100644 --- a/tapset/socket.stp +++ b/tapset/socket.stp @@ -910,7 +910,14 @@ function _success_check(ret:long) function _get_sock_addr:long (file:long) %{ /* pure */ struct file *filep = (struct file *)(long)(THIS->file); - struct socket *sockp = filep? kread(&(filep->private_data)) : NULL; + struct socket *sockp; + if (filep) { + struct dentry *dentry = kread(&(filep->f_dentry)); + struct inode *inode = kread(&(dentry->d_inode)); + sockp = &container_of(inode, struct socket_alloc, vfs_inode)->socket; + } else { + sockp = NULL; + } if (sockp == NULL) THIS->__retvalue = -1; else |