* question about sockfd_lookup( )
@ 2005-03-01 6:02 MingJie Chang
2005-03-01 7:56 ` Eric Dumazet
0 siblings, 1 reply; 4+ messages in thread
From: MingJie Chang @ 2005-03-01 6:02 UTC (permalink / raw)
To: linux-kernel
Dear all,
I want to get socket information by the sockfd while accetping,
so I write a module to test sockfd_lookup(),
but I got some problems when I test it.
I hope someone can help me...
Thank you
following text is my code and error message
===========================================
=== code ===
int my_socketcall(int call,unsigned long *args)
{
int ret,err;
struct socket * sock;
ret = run_org_socket_call(call,args); //orignal sys_sockcall()
if(call==SYS_ACCEPT&&ret>=0)
{
sock=sockfd_lookup(ret,&err);
printk("lookup done\n");
}
return ret;
}
======================================
=== test and state ===
after inserting module, I use "ftp localhost" to test it.
And it has some error when I use "ls" or "mget"(I just try the 2 commands)
EX1: ls :file list is printed, but it will block until ctrl + c
ftp> ls
227 Entering Passive Mode (127,0,0,1,68,186)
150 Here comes the directory listing.
-rwxr-xr-x 1 0 0 13744 Feb 28 05:22 socktest
-rw-r--r-- 1 501 0 76288 Feb 27 19:05 vsftpd-1.1.0-1.i386.rpm
-rw------- 1 501 0 3778 Feb 27 19:29 vsftpd.conf
(blocking until ctrl+c)
after ctrl+c
receive aborted
waiting for remote to finish abort
226 Directory send OK.
500 Unknown command.
663 bytes received in 51 secs (0.013 Kbytes/sec)
ftp>
------------------------------------------------------------
EX2:mget: block until ctrl + c ,and file is not got
ftp> mget *
(blocking until ctrl+c)
receive aborted
waiting for remote to finish abort
Unknown command.
ftp>
(file is not got)
==================================================
== kernel message ==
and than I remove the module, try to ftp localhost again,
and kernel will print some messages
Unable to handle kernel paging request at virtual address c845a089
printing eip:
c845a089
*pde=02ab4067(01194067)
*pte=00000000(00000000)
Oops: 0000
CPU: 0
EIP: 0819:[<c845a089>] Not tainted
EFLAGS: 00213296
eax: 00000004 ebx: c6f18000 ecx: 00000004 edx: 00000004
esi: 00000005 edi: ffffffff ebp: c6f19fbc esp: c6f19f94
ds: 0821 es: 0821 ss: 0821
Process vsftpd (pid: 606, stackpage=c6f19000)<1>
Stack: 00000005 bffffb80 00000000 00000000 c6f18000 00000000 00000000 c6f18000
c6f18000 00000004 bffffc58 c00ae4eb 00000005 bffffb80 bffffc30 00000004
ffffffff bffffc58 00000066 00000833 00000833 00000066 420daa02 0000082b
Call Trace: [<c00ae4eb>]
==================
End of mail
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: question about sockfd_lookup( )
2005-03-01 6:02 question about sockfd_lookup( ) MingJie Chang
@ 2005-03-01 7:56 ` Eric Dumazet
2005-03-01 10:08 ` MingJie Chang
2005-03-02 5:22 ` MingJie Chang
0 siblings, 2 replies; 4+ messages in thread
From: Eric Dumazet @ 2005-03-01 7:56 UTC (permalink / raw)
To: MingJie Chang; +Cc: linux-kernel
Hi
Try adding sockfd_put(sock) ;
MingJie Chang wrote:
> Dear all,
>
> I want to get socket information by the sockfd while accetping,
>
> so I write a module to test sockfd_lookup(),
>
> but I got some problems when I test it.
>
> I hope someone can help me...
>
> Thank you
>
> following text is my code and error message
> ===========================================
> === code ===
>
> int my_socketcall(int call,unsigned long *args)
> {
> int ret,err;
> struct socket * sock;
>
> ret = run_org_socket_call(call,args); //orignal sys_sockcall()
>
> if(call==SYS_ACCEPT&&ret>=0)
> {
> sock=sockfd_lookup(ret,&err);
> printk("lookup done\n");
if (sock) sockfd_put(sock) ;
> }
> return ret;
> }
Eric Dumazet
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: question about sockfd_lookup( )
2005-03-01 7:56 ` Eric Dumazet
@ 2005-03-01 10:08 ` MingJie Chang
2005-03-02 5:22 ` MingJie Chang
1 sibling, 0 replies; 4+ messages in thread
From: MingJie Chang @ 2005-03-01 10:08 UTC (permalink / raw)
To: linux-kernel; +Cc: Eric Dumazet
I can't use sockfd_put(sock) directly.
I trace its code, the code is
extern __inline__ void sockfd_put(struct socket *sock)
{
fput(sock->file);
}
so I use fput(sock->file)
but it has problems too
1) execute "ls" in the ftp is also block
2) kernel prints "socki_lookup: socket file changed!"
3) execute "ftp localhost" after rmmod, it will crash
and why the sockfd_put is needed after sockfd_lookup
Thanak again
MingChieh Chang
Taiwan
===============================================
On Tue, 01 Mar 2005 08:56:19 +0100, Eric Dumazet <dada1@cosmosbay.com> wrote:
> Hi
>
> Try adding sockfd_put(sock) ;
>
> MingJie Chang wrote:
> > Dear all,
> >
> > I want to get socket information by the sockfd while accetping,
> >
> > so I write a module to test sockfd_lookup(),
> >
> > but I got some problems when I test it.
> >
> > I hope someone can help me...
> >
> > Thank you
> >
> > following text is my code and error message
> > ===========================================
> > === code ===
> >
> > int my_socketcall(int call,unsigned long *args)
> > {
> > int ret,err;
> > struct socket * sock;
> >
> > ret = run_org_socket_call(call,args); //orignal sys_sockcall()
> >
> > if(call==SYS_ACCEPT&&ret>=0)
> > {
> > sock=sockfd_lookup(ret,&err);
> > printk("lookup done\n");
>
> if (sock) sockfd_put(sock) ;
>
> > }
> > return ret;
> > }
>
> Eric Dumazet
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: question about sockfd_lookup( )
2005-03-01 7:56 ` Eric Dumazet
2005-03-01 10:08 ` MingJie Chang
@ 2005-03-02 5:22 ` MingJie Chang
1 sibling, 0 replies; 4+ messages in thread
From: MingJie Chang @ 2005-03-02 5:22 UTC (permalink / raw)
To: linux-kernel
I can't use sockfd_put(sock) directly.
I trace its code, the code is
extern __inline__ void sockfd_put(struct socket *sock)
{
fput(sock->file);
}
so I use fput(sock->file)
but it has problems too
1) execute "ls" in the ftp is also block
2) kernel prints "socki_lookup: socket file changed!"
3) execute "ftp localhost" after rmmod, it will crash
and why the sockfd_put is needed after sockfd_lookup
Thanak again
MingChieh Chang
Taiwan
===============================================
- Hide quoted text -
On Tue, 01 Mar 2005 08:56:19 +0100, Eric Dumazet <dada1@cosmosbay.com> wrote:
> Hi
>
> Try adding sockfd_put(sock) ;
>
> MingJie Chang wrote:
> > Dear all,
> >
> > I want to get socket information by the sockfd while accetping,
> >
> > so I write a module to test sockfd_lookup(),
> >
> > but I got some problems when I test it.
> >
> > I hope someone can help me...
> >
> > Thank you
> >
> > following text is my code and error message
> > ===========================================
> > === code ===
> >
> > int my_socketcall(int call,unsigned long *args)
> > {
> > int ret,err;
> > struct socket * sock;
> >
> > ret = run_org_socket_call(call,args); //orignal sys_sockcall()
> >
> > if(call==SYS_ACCEPT&&ret>=0)
> > {
> > sock=sockfd_lookup(ret,&err);
> > printk("lookup done\n");
>
> if (sock) sockfd_put(sock) ;
>
> > }
> > return ret;
> > }
>
> Eric Dumazet
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2005-03-02 5:22 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-03-01 6:02 question about sockfd_lookup( ) MingJie Chang
2005-03-01 7:56 ` Eric Dumazet
2005-03-01 10:08 ` MingJie Chang
2005-03-02 5:22 ` MingJie Chang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox