public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* 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