# Haskell, <s>102 bytes</s> 100 bytes

Saved 2 bytes, thanks to [flawr][1].

    c s=unlines$f(\m->f(m#))where f=(<$>[1..s]);m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
    
    

**Ungolfed version:**



    cross :: Int -> String
    cross s = unlines $ map line [1..s]
        where line m = map (pos m) [1..s]
              pos m n | n == m = '*'
                      | n == s - m + 1 = '*'
                      | elem m [1, s] = '*'
                      | elem n [1, s] = '*'
                      | otherwise = ' '

I'm sure this can still be improved, but this is what I've come up with for now.


  [1]: http://codegolf.stackexchange.com/users/24877/flawr "flawr"